我有一个用均值填充的Javascript数组,我想将它们插入一个名为“ mean”的字段的集合中.字段“均值”已经存在并且已经包含值,现在我要使用数组的值更新它们.更具体地说:我希望数组的第一个值在“ mean”字段下的第一个Document中,依此类推.我有98个文档,数组的长度也为98.
{
"_id" : "000",
"mean" : 33.825645389680915
}
{
"_id" : "001",
"mean" : 5.046005719077798
}
和数组:
[
33.89923155012405,
5.063347068609219
]
解决方法:
您可以在数组上使用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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。