MongoDB - 非规范化模式更新

时间:2015-07-26 19:13:30

标签: mongodb nosql

晚上好。 我有这个MongoDB文档。 enter image description here

本文件包含有关意大利教练M. Allegri的信息。数组coached_Team包含Allegri指导的所有团队。在这个例子中只有一个团队,但它只是一个测试;一个教练在coached_Team数组中有很多团队。 有没有办法更新一支球队的手球?例如,尤文图斯去年赢得了1次意甲冠军和1次意大利杯冠军。 显然,这个查询不起作用,因为在那个数组中,Allegri指导的所有团队都会有掌舵:

db.coach.update({_id:"MA_1967"}, {$set: {"coached_Team.palmarès.Serie A":33}})

所以,我想使用标准化模型而不是非规范化模型。但我想知道是否有办法更新尤文图斯的手掌,例如,使用这种非规范化模式。
谢谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以在更新语句中使用MongoDB位置运算符。 $位置运算符有一些注意事项可以阅读,但您可以像这样编写查询。

db.coach.update({_id:"MA_1967", 'coached_Team': "Juventus"}, {$set: {"coached_Team.$.palmarès.Serie A":33}})

为了使用$位置运算符,您必须在查找中包含一个且只包含一个数组属性。然后,$将仅匹配数组中与您要查找的文档匹配的第一个元素。因此,您的更新语句会读取类似于'设置coached_Team中与我的数组查询匹配的第一项'然后通过$位置运算符访问palmares和Serie A属性。 $elemMatch运算符非常强大,但遗憾的是有时候很麻烦,运算符可以在MongoDB中读取。