收集:
post:
title: 'Help'
tags: ['mongodb','foo']
tags
数组的元素是唯一的。我想将集合中的所有foo
代码更改为bar
代码。我可以在一个步骤中$set
一个数组中的元素,还是必须从所有标记数组中删除foo
并添加bar
s?
答案 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}}的元素。