本文件包含有关意大利教练M. Allegri的信息。数组coached_Team包含Allegri指导的所有团队。在这个例子中只有一个团队,但它只是一个测试;一个教练在coached_Team数组中有很多团队。 有没有办法更新一支球队的手球?例如,尤文图斯去年赢得了1次意甲冠军和1次意大利杯冠军。 显然,这个查询不起作用,因为在那个数组中,Allegri指导的所有团队都会有掌舵:
db.coach.update({_id:"MA_1967"}, {$set: {"coached_Team.palmarès.Serie A":33}})
所以,我想使用标准化模型而不是非规范化模型。但我想知道是否有办法更新尤文图斯的手掌,例如,使用这种非规范化模式。
谢谢。
答案 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中读取。