您的位置:首页 > 数据库 > Mongodb

mongodb中$的作用

2018-01-07 17:50 211 查看

定义

定位符$的确定数组中一个要被更新的元素的位置,而不用具体指定该元素在数组中的位置。

用法

1.更新数组中的值

1)语法格式

{"<array>.$": value}


2)示例

创建集合students有以下文档:

db.students.insert([
{ "_id" : 1, "grades" : [ 85, 80, 80 ] },
{ "_id" : 2, "grades" : [ 88, 90, 92 ] },
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
])


将grades数组中第一个值为80更新为82,如果你不知道第一个值的具体位置,就可以像下面这样写:

db.students.updateOne(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)


定位符$像一个占位符,匹配第一个符合查询条件的值的位置。

2.更新数组中的文档

定位符为更新那些包含嵌入文档的数组提供了方便。要取得嵌入文档中的字段属性值,在后面使用点符号。如一下语法格式描述:

1)语法格式

db.collection.update(
{ <query selector> },
{ <update operator>: { "array.$.field" : value } }
)


2)举例

假设students集合中grades数组包含以下嵌入的文档:

{
_id: 4,
grades: [
{ grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 85, mean: 85, std: 8 }
]
}


使用$定位符去更新grades数组中文档中字段std的值,被更新的文档是第一个匹配grade值为85的文档。如下:

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


跟新后的结果为:

{
"_id" : 4,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 8 },
{ "grade" : 85, "mean" : 90, "std" : 6 },
{ "grade" : 85, "mean" : 85, "std" : 8 }
]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb