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

我在集合中有以下logging:

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

我想能够更改stream数组中特定条目的c_value 。 我一直在使用这两个步骤的过程,从stream数组中提取条目,创build一个新的条目,并将其添加回stream数组。 这工作,但似乎并不是完成这个最有效的方法。 有没有更好的方法可以使用? 以下是我目前使用的代码:

 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); 

谢谢你,加里

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

当只匹配一个数组logging的一个字段,那么下面的工作:

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

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

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