我的数据库部分长这样

{

        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唯我独尊吧!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐