如何使用 Node.JS 更改结构中的一个字段,该字段是 MongoDB 中数组的一部分



我在集合中有以下记录:

{ 
    id : id_value,
    streams : [
        { a : a_value, b : b_value, c : c_value },
        { a : a_value, b : b_value, c : c_value }, ...
    ]
}

我希望能够更改数组中特定条目的c_value。我一直在使用两步过程来执行此操作,从 streams 数组中提取一个条目,创建一个新条目并将其添加回 streams 数组。这有效,但似乎不是实现这一目标的最有效方法。有没有更好的方法可以使用?以下是我目前正在使用的代码:

db.users.update({id:user},
    {$pull : {streams : {$and : [{a : a_value}, {b : b_value}]}}},
    {w:1}, cb);
new_entry = { a : old_a_value, b : old_b_value, c : new_c_value} 
db.users.update({id:user},
    {$addToSet : {streams : new_entry}}, {w:1}, cb);

谢谢加里

如果数组记录中匹配多个字段,则需要$elemMatch字段。

当只匹配数组记录的一个字段时,下面工作:

db.users.update(
    { "id": user, "streams.a": a_value},
    { "$set" : { "streams.$.c": new_c_value } },
    { "w": 1}, cb);

当匹配数组记录的多个字段时,需要$elemMatch,如下所示:

db.users.update(
    { "id": user, streams: {$elemMatch : {a:a_value, b:b_value}},
    { "$set" : { "streams.$.c": new_c_value } },
    { "w": 1}, cb);

最新更新