MongoDB:同时在数组字段中添加和删除

时间:2017-01-26 18:08:18

标签: mongodb

我想在我们的文档中重命名标记' tags数组,例如将集合中的所有代码a更改为c。文件看起来像这样:

[ { _id: …, tags: ['a', 'b', 'c'] },
  { _id: …, tags: ['a', 'b'] },
  { _id: …, tags: ['b', 'c', 'd'] } ]

我需要保留标签唯一。这意味着,此类更新无效,因为第一个文档最终会包含标记c 两次

db.docs.update(
    { tags: 'a' },
    { $set: { 'tags.$': 'c' } }
)

所以,我尝试了这个:

db.docs.update(
    { tags: 'a' },
    {
        $pull: { 'a' },
        $addToSet: { 'c' }
    }
)

但这会产生MongoError: Cannot update 'tags' and 'tags' at the same time

是否有机会通过一次更新重命名标签?

1 个答案:

答案 0 :(得分:1)

根据official MongoDB documentation,无法在一组元素上表达“替换”操作。所以我想,在单次更新中没有办法做到这一点。

<强>更新: 经过一番调查后,我发现了this文件。如果我理解正确,您的查询应如下所示:

db.docs.update({
       tags: 'a'
  }, {
    $set: { 'tags.$': 'c'}
  })

其中'tags。$'表示匹配查询的“tags”数组中第一个元素的选择器,因此它将'a'的首次出现替换为'c'。据我了解,您的“标签”数组不包含重复项,因此首次匹配将是唯一匹配。