0

我有这个集合:{_id, list}

我在列表中有元素,每个元素都有自己的 _id,但我不知道如何更新列表中的所有元素。我知道所有集合在列表中都有独特的元素,包括它们之间。而且我有具有更新属性的元素:|

希望我解释清楚。

4

1 回答 1

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

将对存在给定子文档的每个列表执行更新。

于 2013-07-13T22:34:50.247 回答