来自http://docs.mongodb.org/manual/reference/operator/update/positional/的MongoDB文档
可以使用$
运算符更新内部字段,如给定示例
{ "_id" : 4, "grades" : [ { grade: 80, mean: 75, std: 8 }, { grade: 85, mean: 90, std: 5 }, { grade: 90, mean: 85, std: 3 } ] }
使用位置$运算符更新嵌入文档中std字段的值,等级为85:
db.students.update( { _id: 4, "grades.grade": 85 }, { $set: { "grades.$.std" : 6 } } )
有人可以解释一下$
如何发挥作用吗?为什么MongoDB开发人员没有简化它,就像我们可以找到"grades.grade":85
的文档并使用"grades.std":6
更新?或者我错过了什么?
答案 0 :(得分:0)
位置$
运算符充当与查询文档匹配的第一个元素的占位符。
如果没有$
,则必须执行额外的步骤来获取匹配元素的索引。否则索引将被硬编码。
更新示例:
db.students.update( { _id: 4, "grades.grade": 85 }, { $set: { "grades.$.std" : 6 })
"grades.grade":85
是find a document where 'grades' has 'grade' set to `85
。
"grades.2.std":6
读为within 'grades', set 'std' to 6 for the element at index 2
。
"grades.$.std:6"
读为within 'grades', set 'std' to 6 for the first matched element
。
"grades.std":6
听起来像within 'grades', for all elements set 'std' to '6'
。在MongoDB 2.6中,这不是supported feature。