首页 > 解决方案 > 是否可以向现有 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()

是否可以在不重新输入所有数据的情况下修改查询?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


不,这是不可能的。查询对象是不可变的。一旦通过调用一系列方法构建了查询对象,以后就无法“撤消”这些更改。如果您希望它们应用,您必须使用第二种方法有条件地添加过滤器和排序。

如果您想要一个更清晰的模式来有条件地对查询应用约束,请参阅:Firestore:多个条件 where 子句

基本上,您将通过根据需要有条件地重新分配查询对象来有条件地应用约束:

let query = ...
if (someCondition) {
    query = query.startAfter(...)
}

推荐阅读