【问题标题】:Is there any standard firestore query to get random documents?是否有任何标准的 Firestore 查询来获取随机文档?
【发布时间】:2020-10-03 11:22:34
【问题描述】:

我正在尝试从动态集合中获取多个随机文档。在知道之前,我曾想过使用简单的查询来做到这一点,如下所示:

 Pseudocode
 
 arr = [];
 while (arr.length < 5) {
     // Start the query at a random position
     startAt = Math.random() * collection.size;
     randomDoc = await dbRef.startAt(startAt).limit(1).get( ... );
     arr.push(randomDoc);
 }

在这里,首先,我必须获取集合大小,因为它可以是 0 或更大。然后,使用一种“db random pointer/index”选择一个随机文档。

我的问题是,是否有任何方法可以获得相同的结果,但没有所有循环内容,仅使用查询语法。

谢谢。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    巧妙使用startAt和limit!
    正如您在the reference 中看到的那样,没有可以返回随机文档的内置方法。

    为了避免循环,可以使用Promise.all

    const indices = getRandomIndices(collection.size);
    const docs = await Promise.all(indices.map(i => {
        return dbRef.startAt(i).limit(1).get();
    }));
    

    对于 getRandomIndices,我建议:创建一个数组 [0, 1, 2, ...],按照SO answer 中的描述对其进行洗牌,然后对其前 5 个元素进行切片。

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 2022-01-06
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多