node.js - 两个时间戳之间的 Firebase Firestore 查询
问题描述
我想找到现在和即将到来(未来 30 天)但也不是过去的事件。
当我将其作为云功能运行时,我得到“不能在多个属性上使用不等式过滤器”。我是如何获得这种类型的数据的。
(忽略日期的东西有点乱的事实,我还在玩)。
// Create date 30 days in future
const searchData: Date = new Date();
searchData.setDate(searchData.getDate() + 30);
// Load data and handle empty respoonse
const response: admin.firestore.QuerySnapshot = await admin
.firestore()
.collection(Collections.EVENTS)
.where("startDate", "<=", admin.firestore.Timestamp.fromMillis(searchData.valueOf()))
.where("endDate", ">=", admin.firestore.Timestamp.fromMillis(new Date().valueOf()))
.where("public", "==", true)
.limit(NUMBER_OF_EVENTS)
.get();
编辑:我想知道数据结构/查询方法,它允许我返回事件集合中现在或下个月开始的所有事件。此外,我希望查询排除已经完成的事件。每个文档(事件)上都有一个 startDate 和 endDate 时间戳。
解决方案
由于您有两个字段要检查范围,因此我不确定这是否可以通过单个查询来实现。您可以做的是执行两个查询,在客户端合并结果,然后执行最终过滤器以获取精确匹配。
- 对事件的最长持续时间做出假设。将这段时间称为“X”。
- 查询 startDate 大于 now - X 且小于 now + 30 天的所有文档。将此结果集称为“A”。
- 查询 endDate 大于 now 且小于 now + 30 天的所有文档。将此结果集称为“B”。
- 在客户端上,迭代 A 和 B 的所有结果,检查开始日期和结束日期是否符合您想要的条件。
我想不出一种方法来构造你的数据,这将通过一个查询来完成。
推荐阅读
- laravel - 氩气设计未在 laravel 中渲染。如何使用 mix 从节点模块中提取它?
- javascript - 如何根据 React.js 中的多个复选框状态禁用/启用按钮
- ruby-on-rails - 将表单切换到远程:真正打破 VCR
- python - 如何拆分文本列并将它们组合成 Pandas DataFrame 中的新列
- azure - 如何在 C++ 中使用 Azure 服务总线
- api - 使用 Tableau 的 API 密钥
- javascript - 使用 React 在“注册”中添加悬停动画
- android - 使用 RocketChat 时无法检测到 Flutter Webview 中的页面导航
- r - 连接向量,append() vs c()
- c# - 模态弹出检测实用程序(.NET 或 PowerShell)