$
¶位置$
运算符标识要更新的数组中的元素,而无需显式指定数组中元素的位置。
消歧
$
投影或返回数组元素,请参阅投影运算符。$[]
。$[<identifier>]
。位置$
运算符的格式为:
与更新操作(例如
db.collection.update()
和
db.collection.findAndModify()
)一起使用时
$
运算符充当与匹配的第一个元素的占位符,并且query document
array
字段必须显示为的一部分。query
document
例如:
如果查询使用否定运算符,如阵列相匹配
$ne
,$not
或者$nin
,那么你就不能使用位置运营商更新值从该数组。
但是,如果查询的否定部分在$elemMatch
表达式内部
,则可以使用位置运算符更新此字段。
students
使用以下文档创建一个集合:
要更新的第一个元素,它的值是80
要82
在中grades
排列,使用位置$
操作,如果你不知道数组中元素的位置:
重要
您必须将数组字段包含在query
文档中。
操作后,students
集合包含以下文档:
位置$
运算符有助于更新包含嵌入式文档的数组。使用位置$
操作者进入场中嵌入文档用
点号的
$
运营商。
请考虑students
集合中的以下文档,该文档的
grades
元素值为嵌入式文档的数组:
使用位置$
运算符更新std
匹配grade
等于85
条件的第一个数组元素的字段:
重要
您必须将数组字段包含在query
文档中。
操作后,文档具有以下更新值:
的$
操作者可以更新匹配与指定的多个查询条件的第一个数组元素$elemMatch()
运营商。
考虑students
集合中的以下文档,该文档的
grades
字段值为嵌入式文档的数组:
在下面的示例中,$
操作员更新std
第一个嵌入式文档中的字段值,该
字段grade
的值小于或等于,90
而mean
字段的值大于80
:
此操作将更新符合条件的第一个嵌入式文档,即数组中的第二个嵌入式文档: