Firebase 按Firestore中文档的顺序获取定位

Firebase 按Firestore中文档的顺序获取定位,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,想象一下任何结构: collection/document 在每个文档中都有一个值,比如某种分数。然后我按此分数排序我的收藏:collection(“collection”).orderBy(“score”) 我可以从此集合(“集合”).orderBy(“分数”)中检索特定文档。其中(FieldPath.documentId(),“==”,“document1234”) 现在,我想知道是否可以按顺序获得我的特定文档的位置。您可以在文档中添加一个函数触发器,用于指定索引。然后,您的位置就是索引字

想象一下任何结构:

collection/document
在每个文档中都有一个值,比如某种分数。然后我按此分数排序我的收藏:
collection(“collection”).orderBy(“score”)

我可以从此
集合(“集合”).orderBy(“分数”)中检索特定文档。其中(FieldPath.documentId(),“==”,“document1234”)


现在,我想知道是否可以按顺序获得我的特定文档的位置。

您可以在文档中添加一个函数触发器,用于指定索引。然后,您的位置就是索引字段。您需要为onUpdate和onDelete添加一个触发器

exports.updateScorePosition = functions.firestore.document('collection/{documentId}').onWrite(event => {
    return db.collection('collection').orderBy('points').get()
        .then(snapshot => {
            let updatePointsBatch = db.batch();
            let i = 0;
            snapshot.docs.forEach(doc => {
                updatePointsBatch.update(doc.ref, { index: i})
                i++;
            });
            return updatePointsBatch.commit();
        })
        .catch(error => console.log('error: ' + error));
});

如果您使用的是一个大型集合,那么您可能只需要在当前文档索引之后更新索引就可以对此进行优化

这是一个选项,但我当然不想为此浪费函数调用。我将有机会在另一个函数中执行类似的操作,但我不确定每次调用时检查所有文档是否是一个好主意,因为我的集合非常大,即大小有一个开放端,这最终会使调用速度非常慢。