我有这个集合:{_id, list}
我在列表中有元素,每个元素都有自己的 _id,但我不知道如何更新列表中的所有元素。我知道所有集合在列表中都有独特的元素,包括它们之间。而且我有具有更新属性的元素:|
希望我解释清楚。
我希望我能解决你的问题。
假设,您想通过它来更新列表中给定的子文档_id
,但您不知道它的父文档_id
。
要进行更新操作,您可以使用以下命令:
db.collection.update({
'list._id': subdoc_id
},{
$set: {
'list.$.field1': value1,
'list.$.field2': value2,
'list.$.field3': value3
}
})
用新的子文档替换旧的子文档(相当于save
):
db.collection.update({
'list._id': subdoc._id
},{
$set: {
'list.$': subdoc
}
})
但是您应该知道,此操作将完全擦除旧的子文档并用新的子文档替换它。因此,任何未列出的字段subdoc
都将被删除。
{'list._id': subdoc_id}
查询将找到包含给定子文档的父文档,'list.$'
选择器将指向查询的子文档。
更新:如果您不知道给定子文档存储在哪个特定列表中,则需要对每个子文档运行更新操作:
['list1', 'list2', 'nested.list'].forEach(function (list) {
var query = {};
query[list+'._id'] = subdoc._id;
var update = { $set: {} };
update.$set[list+'.$'] = subdoc;
db.collection.update(query, update);
})
将对存在给定子文档的每个列表执行更新。