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