javascript - 是否可以向现有 Firestore 查询添加参数?
问题描述
有没有办法修改 Firestore 查询?
当我使用下面的代码时,查询将忽略startAfter
let query = firestore.collection('results')
.where('groupId', '==', req.query.groupId)
.where('seasonInfo.roundId', '==', req.query.roundId)
.orderBy('results.totalPoints', 'desc')
.orderBy('lastPick', 'asc')
if (req.query.lastPoints && req.query.lastDate) {
query.startAfter(parseInt(req.query.lastPoints), req.query.lastDate)
}
const pickDocs = await query.limit(10).get()
所以我必须写整个东西才能让它工作。
let query = firestore.collection('results')
.where('groupId', '==', req.query.groupId)
.where('seasonInfo.roundId', '==', req.query.roundId)
.orderBy('results.totalPoints', 'desc')
.orderBy('lastPick', 'asc')
if (req.query.lastPoints && req.query.lastDate) {
query = firestore.collection('results')
.where('groupId', '==', req.query.groupId)
.where('seasonInfo.roundId', '==', req.query.roundId)
.orderBy('results.totalPoints', 'desc')
.orderBy('lastPick', 'asc')
.startAfter(parseInt(req.query.lastPoints), req.query.lastDate)
}
const pickDocs = await query.limit(10).get()
是否可以在不重新输入所有数据的情况下修改查询?
解决方案
不,这是不可能的。查询对象是不可变的。一旦通过调用一系列方法构建了查询对象,以后就无法“撤消”这些更改。如果您希望它们应用,您必须使用第二种方法有条件地添加过滤器和排序。
如果您想要一个更清晰的模式来有条件地对查询应用约束,请参阅:Firestore:多个条件 where 子句
基本上,您将通过根据需要有条件地重新分配查询对象来有条件地应用约束:
let query = ...
if (someCondition) {
query = query.startAfter(...)
}
推荐阅读
- javascript - 如何接收用户输入的日期并将其与 date() javascript 函数匹配?
- rust - FnBox 示例抛出错误:盒装中没有 FnBox?
- stripe-payments - 为什么 Stripe checkout Webhooks 会将 customer_email 发送为 null?
- java - 创建输入字符菜单
- python - 并排显示两张 Folium 地图?
- html - 悬停在菜单上显示每个菜单中的下拉菜单列表
- ios - Swift:更改 iOS 13 的状态栏颜色
- javascript - 复选框收音机中的刷新方法不起作用
- c# - 在 Onion 架构中抛出异常与返回操作结果对象
- c - 在 Visual Studio 代码中运行的 gcc mingw 中编译 c 程序时出错