Firestore:如何在集合中获取随机文档?
0 867
0

我想从Firebase的集合中随机选择多个文档。

由于Firebase没有内置本机函数来实现执行此操作的查询,因此我的第一个想法是使用查询游标选择随机的开始和结束索引,前提是我拥有其中的文档数集合。我的问题是找不到任何描述如何执行操作甚至可以执行操作的文档。

这是我的代码,考虑Firestore模式:

root/
  posts/
     docA
     docB
     docC
     docD

然后在我的客户端(在Swift环境中)中,我想编写一个查询来做到这一点:

db.collection("posts")[0, 1, 3] // would return: docA, docB, docD

我怎么完成类似的事情吗?或者是否有其他方法可以用类似方式选择随机文档?

收藏
2021-02-17 14:23 更新 han •  277
共 1 个回答
高赞 时间
0

如果你用的是自动ID,则可以生成新的自动ID并查询最接近的自动ID,如Dan McGrath的Answer中所述。

我最近创建了一个随机报价API,需要从Firestore集合中获取随机报价。下面是我的解决方法:

var db = admin.firestore();
var quotes = db.collection("quotes");

var key = quotes.doc().id;

quotes.where(admin.firestore.FieldPath.documentId(), '>=', key).limit(1).get()
.then(snapshot => {
    if(snapshot.size > 0) {
        snapshot.forEach(doc => {
            console.log(doc.id, '=>', doc.data());
        });
    }
    else {
        var quote = quotes.where(admin.firestore.FieldPath.documentId(), '<', key).limit(1).get()
        .then(snapshot => {
            snapshot.forEach(doc => {
                console.log(doc.id, '=>', doc.data());
            });
        })
        .catch(err => {
            console.log('Error getting documents', err);
        });
    }
})
.catch(err => {
    console.log('Error getting documents', err);
});

查询的关键是:

.where(admin.firestore.FieldPath.documentId(), '>', key)

收藏
2021-02-17 14:48 更新 玩手机的豆浆 •  691