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



我在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
}
})

如注释中所述,可以使用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;
}
})

最新更新