Mongodb 对内嵌数组的增删改查操作

先做一个初始化,设置一个User类,其初始数据如下:

{ arr: [ 1, 2 ],
  _id: 5ac5ee12a79131259413c40f,
  name: 'scy',
  __v: 0 }

每次以初始数据为基,进行操作。
1、向内嵌数组添加数据

使用操作符 $push,向数组末尾添加数据 ,可重复

//第一个参数是匹配条件 第二个参数是具体操作
User.update({name:"scy"},{$push:{"arr":3}});//向user里面的arr末尾追加元素3

结果如下:

{ arr: [ 1, 2, 3 ],
  _id: 5ac5f0d3db343b1888a8969d, name: 'scy',__v: 0 }

一次添加多个数据

User.update({name:"scy"},{$push:{"arr":{$each:[2,3]}}});

2、删除内嵌数组指定数据
使用操作符 $pull

//删除arr所有数据为2的元素
  User.update({name:"scy"},{$pull:{"arr":2}});

执行结果:{ arr: [ 1 ], _id: 5ac5f39fdad94e23e8de9aee, name: 'scy', __v: 0 }

如果数组元素是对象,可以根据对象属性操作:

{
  name:"scy",
  mArray:[{age:13,weight:50},{age:13,weight:30}]
}
User.update({name:"scy"},{$pull:{"mArray":{"weight":30}}});//删除所有weight属性值为30的对象

3、修改内嵌数组指定数据
我暂时还没找到能批量修改数组元素的方法

//将数组里面的第一个元素1修改为3
User.update({"arr":{$all:[1]}},{$set:{"arr.$":2}});
//也可以根据下标
User.update({$set:{"arr.1":22}});//将arr下标为1的元素修改为22

如果数组的元素是对象,如下:

{
  name:"scy",
  mArray:[{age:13,weight:50},{age:13,weight:30}]
}

修改操作如下:

User.update({"mArray.age":13},{$set:{"mArray.$.age":22}});//将第一个age为13的值修改为22
//还可以这样 mArray.1.age 其中1是下标 
User.update({$set:{"mArray.1.age":22}});//将arr第二个元素对象的age改为22

4、查询内嵌数组并返回指定的数据
使用$size 返回指定数组长度的数据

//$size限制比较大 下面表示查询数组长度为2的数据
User.find({arr:{$size:2}})

$slice,这个操作符还是比较强大的

//匹配到的user 将其数组截取第一个返回 如[1,1,2]返回[1]
User.findOne({name:"scy"},{arr:{$slice:1}});
//将匹配到的user的数组 截取返回后面两个元素  如[1,1,2]返回[1,2]
User.findOne({name:"scy"},{arr:{$slice:-2}});
//从数组的下表为1的元素开始 返回两个 如[1,3,2]返回[3,2]
User.findOne({name:"scy"},{arr:{$slice:[1,2]}});

版权声明:本文为chaoyangsun原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。