searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

mongodb数组更新

2023-09-22 05:38:46
5
0

1.更新数组中单个元素

首先通过下述语句创建一张student(学生成绩表),并插入3条语句,grades为分数数组。

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

如果我们想更新grades数组中,分数等于80的第一个数组元素,我们可以使用下述命令,

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

执行完之后,学生成绩表的数据如下:

{ "_id" : 1, "grades" : [ 85, 82, 80 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }

 

若是数组元素为对象的情况,采用下述语法进行更新,

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

示例:

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

假如我们想更新数组对象中,grade=85对象的std元素的值,可以使用下述语句

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 }
   ]
}

 

2.更新数组中所有元素

采用下属命令格式更新

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

示例

db.students2.update(
   {_id: 5 },
   { $set: { "grades.$[].grade" : 90, "grades.$[].stu" : 9} },
   { multi: true }
)

 

3.根据数组元素条件查询

根据数组元素条件查询,可以使用$elemMatch,

示例:

db.students2.find({'name':'lisi', 'grades':{$elemMatch:{'grade': 90}}}).pretty();

上述命令可以将姓名是lisi且grades数组元素对象中,属性grade=90的文档查询出来,某些情况下,数组元素对象很多,若只想显示符合条件的指定数组,可以使用下述命令

db.students2.find({'name':'lisi', 'grades.grade':90}, {'grades':{$elemMatch:{'grade':90}}}).pretty();
0条评论
0 / 1000
天凉好个秋
7文章数
0粉丝数
天凉好个秋
7 文章 | 0 粉丝

mongodb数组更新

2023-09-22 05:38:46
5
0

1.更新数组中单个元素

首先通过下述语句创建一张student(学生成绩表),并插入3条语句,grades为分数数组。

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

如果我们想更新grades数组中,分数等于80的第一个数组元素,我们可以使用下述命令,

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

执行完之后,学生成绩表的数据如下:

{ "_id" : 1, "grades" : [ 85, 82, 80 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }

 

若是数组元素为对象的情况,采用下述语法进行更新,

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

示例:

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

假如我们想更新数组对象中,grade=85对象的std元素的值,可以使用下述语句

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 }
   ]
}

 

2.更新数组中所有元素

采用下属命令格式更新

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

示例

db.students2.update(
   {_id: 5 },
   { $set: { "grades.$[].grade" : 90, "grades.$[].stu" : 9} },
   { multi: true }
)

 

3.根据数组元素条件查询

根据数组元素条件查询,可以使用$elemMatch,

示例:

db.students2.find({'name':'lisi', 'grades':{$elemMatch:{'grade': 90}}}).pretty();

上述命令可以将姓名是lisi且grades数组元素对象中,属性grade=90的文档查询出来,某些情况下,数组元素对象很多,若只想显示符合条件的指定数组,可以使用下述命令

db.students2.find({'name':'lisi', 'grades.grade':90}, {'grades':{$elemMatch:{'grade':90}}}).pretty();
文章来自个人专栏
天凉好个秋-软件开发
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0