【问题标题】:Is it possible to add parameters to an existing Firestore query? [duplicate]是否可以向现有 Firestore 查询添加参数? [复制]
【发布时间】:2021-02-13 03:38:15
【问题描述】:

有没有办法修改 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()

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

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多