这是我的MongoDB查询:
db.events.update({date:{$gte: ISODate("2014-09-01T00:00:00Z")}},{$set:{"artists.$.soundcloud_toggle":false}},{multi:true,upsert:false})
显然我不能使用“艺术家。$。soundcloud_toggle”来更新艺术家阵列中的所有艺术家文档:
“$运算符可以更新匹配的第一个数组元素 使用$ elemMatch()运算符指定的多个查询条件。 http://docs.mongodb.org/manual/reference/operator/update/positional/“
我很高兴多次运行查询来更改数组的索引,以便在与查询匹配的每个事件中设置每个艺术家的soundcloud_toggle属性,例如
artists.0.soundcloud_toggle
artists.1.soundcloud_toggle
artists.2.soundcloud_toggle
artists.3.soundcloud_toggle
问题是:当有说法时,艺术家数组中只有一个艺术家文档,我用“artists.1.soundcloud_toggle”运行查询。它会将艺术家文档插入到具有单个属性的艺术家数组中:
{
"soundcloud_toggle" : true
},
(我已声明“upsert:false”,默认情况下应默认为false)
当没有现有文档时,如何停止查询插入文档并设置soundcloud_toggle:false?如果艺术家存在于给定的艺术家数组索引中,我只希望它更新属性。
答案 0 :(得分:0)
如果像您说的那样,您不介意使用多个查询完成操作,则可以向过滤器添加$exists
条件。
E.g。在第5次迭代中,当更新index = 4时,添加:"artists.4": {$exists: true}
,如:
db.events.update(
{ date: {$gte: ISODate("2014-09-01T00:00:00Z")},
"artists.4": {$exists: true} },
{ $set:{ "artists.4.soundcloud_toggle" :false } },
{ multi: true, upsert: false }
)