如何更新我知道所有内容的子字段,但不知道它的子字段到哪个字段?

时间:2013-07-13 21:29:13

标签: node.js mongodb

我有这个系列: {_id,list}

我有列表中的元素,每个元素都有自己的_id,但我无法弄清楚如何更新列表中的所有元素。我知道所有馆藏在列表中都有独特的元素,包括它们之间。我有更新属性的元素:|

希望我能清楚地解释清楚。

1 个答案:

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

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