在mongodb php查询中使用$操作

时间:2014-09-07 17:19:29

标签: php mongodb

来自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更新?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

位置$运算符充当与查询文档匹配的第一个元素的占位符。 如果没有$,则必须执行额外的步骤来获取匹配元素的索引。否则索引将被硬编码。

更新示例:

db.students.update( { _id: 4, "grades.grade": 85 }, { $set: { "grades.$.std" : 6 })

"grades.grade":85find 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