Mongodb:从我的集合中汇总一个随机的$ sample并更新所有这些文档

时间:2019-07-14 23:28:26

标签: node.js mongodb mongoose

我在MongoDB中有一个集合,我想从中收集随机样本。这将是大约14,000个文档。我希望此随机样本中的每个文档都得到更新。最好/最有效的方法是什么?

这是我现在拥有的代码,但是缺少update部分。

db.collection(collection).aggregate([{ $sample: { size: sample_size } }]).toArray((err, docs) => {

      if (err) {
        console.log(err);
      }

      else {
        // update all 14,000 (or so) documents that were just pulled
      }
    })

1 个答案:

答案 0 :(得分:0)

如注释中所述,可以使用forEach执行数组更新,以访问数组中的每个文档并进行更改。对于14k元素,这不是即时过程。一种选择是在完成时向用户显示加载图标。另一种方法是在最初将数据保存到数据库时执行此操作,以避免在从数据库中检索时进行批处理(如果用例允许的话)。第三个也是最复杂的解决方案是使用比数组更有效的数据结构。

   db.collection(collection).aggregate([{ $sample: { size: sample_size } }]).toArray((err, docs) => {

          if (err) {
            console.log(err);
          }

          else {
            docs.forEach((doc) => {doc.vegetable = 'asparagus'});
            return docs;
          }
        })