我有一个填充了平均值的Javascript数组,我想将它们插入到一个名为&#34的字段的集合中;意思是"。 Field"意思是"已经存在并且已经存在值,现在我想用Array的值更新它们。更具体一点:我希望数组的第一个值位于字段下的第一个文档中#34;意思是"等等。我有98个文档,数组的长度也是98。
Collection的名称与#34; cmean":
相似{
"_id" : "000",
"mean" : 33.825645389680915
}
{
"_id" : "001",
"mean" : 5.046005719077798
}
和数组:
[
33.89923155012405,
5.063347068609219
]
答案 0 :(得分:3)
您可以在数组上使用 forEach
方法迭代它并更新集合。使用索引获取要在更新查询中使用的_id
,如下所示:
meansArray.forEach(function(mean, idx) {
var id = db.cmean.find({}).skip(idx).limit(1).toArray()[0]["_id"];
db.cmean.updateOne(
{ "_id": id },
{ "$set": { "mean": mean } },
{ "upsert": true }
);
});
对于大型集合,您可以使用 bulkWrite
简化数据库性能,如下所示:
var ops = [];
meansArray.forEach(function(mean, idx) {
var id = db.cmean.find({}).skip(idx).limit(1).toArray()[0]["_id"];
ops.push({
"updateOne": {
"filter": { "_id": id },
"update": { "$set": { "mean": mean } },
"upsert": true
}
});
if (ops.length === 1000 ) {
db.cmean.bulkWrite(ops);
ops = [];
}
})
if (ops.length > 0)
db.cmean.bulkWrite(ops);
答案 1 :(得分:0)
update({"_id": id}, $set: {"mean": myArray}, function(res, err) { ... });
如果您使用的是mongoose,则还必须将数据模型从字符串更改为数组。