如何更新Mongodb中的原始类型数组?

时间:2013-11-26 00:04:57

标签: mongodb

收集:

post:
  title: 'Help'
  tags: ['mongodb','foo']

tags数组的元素是唯一的。我想将集合中的所有foo代码更改为bar代码。我可以在一个步骤中$set一个数组中的元素,还是必须从所有标记数组中删除foo并添加bar s?

2 个答案:

答案 0 :(得分:1)

尝试此查询:

db.posts.update({ tags: "foo" }, { $set: { "tags.$": "bar" } }, { multi: true});

但如果您的tags数组包含多个foo值,则此查询将替换只有一个

答案 1 :(得分:1)

目前,您无法通过一个查询执行此操作。实现这一目标的一种合理方法是使用$ pull和$ push:

db.a.update({
    tags : 'foo'
  },{
    $pull : {tags : 'foo'},
    $push : {tags : 'bar'}
  },{
    multi : true
})

但最终会出现字段名称重复不允许使用修饰符错误消息,这基本上告诉您不能同时使用$ pull和$ push。 Jira ticket was filed几年前modify them in foreach statement,但仍然没有得到解决(基于次要标签,很可能不会很快得到解决)。

使用它的一种方法是运行查询以查找包含foo的文档的ID,然后运行另一个查询以删除所有这些foo,另一个查询以插入bars对于所有ID。我知道可能在这些更新之间可以修改集合,但这是一个选项。

另一种方法是遍历所有标记为foo和{{3}}的元素。