将Javascript数组值放入Mongodb集合值中

3
我有一个填充了平均值的JavaScript数组,我想将它们插入到一个名为“mean”的字段的集合中。字段“mean”已经存在,并且其中已经有值,现在我想用数组的值更新它们。更具体地说,我希望数组的第一个值位于第一个文档的“mean”字段下,依此类推。我有98个文档,数组的长度也为98。
集合名称为“cmean”。
{ 
    "_id" : "000", 
    "mean" : 33.825645389680915

}
{ 
    "_id" : "001", 
    "mean" : 5.046005719077798 

}

以及数组:

[
    33.89923155012405, 
    5.063347068609219
]

lastedit是什么语法?在更新中使用find吗? - Nozar Safari
@chridam的答案是正确的,只是第4行缺少一个}。 - Nozar Safari
1
检查更新后的答案。 - chridam
1
@chridam 已经完美运行。非常感谢你。 :) - Victor W.
2个回答

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
所有的 _id 都是零填充的吗? - chridam
没有零后面有名字。 - Victor W.

0
update({"_id": id}, $set: {"mean": myArray}, function(res, err) { ... });

如果您正在使用mongoose,您还需要将数据模型从字符串更改为数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接