我的数据库部分长这样
{
name:'bonny',
points:[{},{},{}],
schedules:[
{
guards:[],
identity:'',
name:'',
startAt:'',
repeat:''
},
{
guards:[],
identity:'',
name:'',
startAt:'',
repeat:''
},
],
}
简单的说我需要将{ schedules:[ { guards:[111 ] }, { guards:[111 ] },{ guards:[111 ] }]},
变成{ schedules:[ { guards:[111,222 ] }, { guards:[111,222 ] },{ guards:[111,222 ] }]},
一.增加值(往数组里的对象里的数组添加值)
现在,我需要往schedules这个数组里面的每一个对象里的guards这个数组添加值,语句为:
db.getCollection('patrols').update({name:'ME Camera Room'},{$push:{'schedules.$[].guards':'1001844'}})
其中需要注意的是:
1.getCollection('patrols')可以直接写成patrols,也就是你要修改的表名。
2.update支持修改一条数据和多条数据,默认修改一条数据,如果要修改多条数据的话,则要多加一个true,也就是写成下面👇🏻这样。如果只想修改一条数据也可以将update改成updateOne,想修改多条数据时,update可以写成updateMany。updateOne和updateMany就不需要加true。
db.getCollection('patrols').update({name:'ME Camera Room'},{$push:{'schedules.$[].guards':'1001844'}},true)
3. $[]会循环完整个schedules数组,如果把$[]改为$则只会修改schedules数组的第一个对象里面的guards数组。当然如果你只想往schedules数组里面指定的下标里面的guards添加值,则可以把$换为指定的数组下标。
二.删除(删除数组里的对象里的数组里的指定值)
要删除schedules里的每一个对象里面的值为1001844的guards:
db.getCollection('patrols').update({name:'ME Camera Room'},{$pull:{'schedules.$[].guards':'1001844'}})
就是将上面的push改成了pull。
以上为本人在实践时遇到的问题,然后经过多番百度之后得到的解决办法,仅供参考,如有错误欢迎大家在评论区一起讨论~让我们一起变强到MongoDB唯我独尊吧!