$¶位置$运算符标识要更新的数组中的元素,而无需显式指定数组中元素的位置。
消歧
$投影或返回数组元素,请参阅投影运算符。$[]。$[<identifier>]。位置$运算符的格式为:
与更新操作(例如
db.collection.update()和
db.collection.findAndModify())一起使用时
$运算符充当与匹配的第一个元素的占位符,并且query documentarray字段必须显示为的一部分。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:
此操作将更新符合条件的第一个嵌入式文档,即数组中的第二个嵌入式文档: