我有这个系列: {_id,list}
我有列表中的元素,每个元素都有自己的_id,但我无法弄清楚如何更新列表中的所有元素。我知道所有馆藏在列表中都有独特的元素,包括它们之间。我有更新属性的元素:|
希望我能清楚地解释清楚。
答案 0 :(得分:0)
我希望我的问题正确。
假设您想要通过_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);
})
将对存在给定子文档的每个列表执行更新。