2022MongoDB2-mongodb的增删改
1进入数据库后必须要先认证用户才能继续操作,Mongodb里的集合相当于mysql里的一张表,因此show tables即可查看所有的集合(表),集合里的insertOne()方法表示要往集合里插入一条数据,集合里的insertMany()方法表示要往集合里插入多条数据,find()方法可以查看集合(表)里面的所有数据行,而集合里的save()方法的作用是:条件不存在就新增,条件存在就修改,但是只能一条一条的新增或者修改
2集合里的update()方法有8个常用的操作符如下:
1,$set:用来指定一个key,并更新这个key的value值,如果key不存在就创建
修改或更新符合条件的第一个文档:db.users.update({},{"$set":{"name":"set","age":30}});
修改或更新符合条件的所有文档:db.users.update({},{"$set":{"name":"zhangsan","age":"18"}},{"multi":true}); 2,$inc:对文档内某个值为数字型的键进行操作
给age的值加1操作,不新增批量操作:db.users.update({},{"$inc":{"age":1}},false,true);
3,$unset:主要用来删除键,让键的值为空
删除匹配第一条数据里的age字段:db.users.update({},{"$unset":{"age":"22222"}}); 4,$push: 向key的value类型为数组的里添加元素,不过滤重复数据
向{"hobbies":[]}数组里追加元素:db.users.update({},{"$push":{"hobbies":"eat"}}); 4 5 6 7 8
5,$pop:删除匹配的第一条数据元素,1表示尾部,-1表示头部
删除{"hobbies":[]}列表内的最后一个元素:db.users.update({},{"$pop":{"hobbies":1}});
6,$pull:删除数组里面所有匹配的元素
删除数组里所有的值eat:db.users.update({},{"$pull":{"hobbies":"eat"}});
7,$pullAll:可设置多条件删除
把数组里的sleep和eat字段全部删除:db.users.update({},{"$pullAll":{"hobbies":["eat","sleep"]}});
8,$rename:修改字段名(删除原字段,增加新字段)
修改name为username:db.users.update({"_id" : ObjectId("61d932d3adfe46eefd559f30")},{"$rename":{"name":"username"}});
3练习:
数据库管理:
#进入数据库 [root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("9879ff05-8abb-4b21-8e0d-d675c4a70d62") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 > show databases; admin 0.000GB config 0.000GB local 0.000GB #删除test数据库 > use test switched to db test > db.dropDatabase(); { "dropped" : "test", "ok" : 1 } >
集合管理
MongoDB中的集合是一组文档的集,相当于mysql的一个表
[root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("9879ff05-8abb-4b21-8e0d-d675c4a70d62") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 #查看当前数据库中都有哪些集合 > use linuxTang switched to db linuxTang > show tables; > show collections; #创建一个item集合 > db.createCollection("item") { "ok" : 1 } #查看当前数据库中都有哪些集合 > show tables item > show collections; item #查看item这个集合详情 > db.item.stats(); #创建一个order集合,集合里的数据不能超过10条且集合大小容量不能超过1000字节 > db.createCollection("order",{"capped":true,"size":1000,"max":10}); { "ok" : 1 } #删除一个集合 > show tables; item order tmp > db.tmp.drop(); true > show tables; item order >
插入数据保存数据
[root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("29e05e0e-c195-46a8-9aa3-748453231906") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456") 1 #往集合里插入多条数据(旧方法) > db.itetm.insert([{"name":"Huawei P30"},{"name":"IPhone XXX"}]); BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) #往集合里插入一条数据(旧方法) > db.item.insert({"name":"Xiaomi8"}); WriteResult({ "nInserted" : 1 }) > #向一个不存在的集合插入数据,默认会自动给你创建一个集合 > db.itet.insert([{"name":"Huawei P30"},{"name":"IPhone XXX"}]); BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) #向集合插入一条数据(推荐新方法) > db.item.insertOne({"name":"redmi 10"}); { "acknowledged" : true, "insertedId" : ObjectId("61d8f681aa30ebeedffca106") } #向集合插入多条数据(推荐新方法) > db.item.insertMany([{"name":"vovo 11"},{"name":"Nokia x6"}]); { "acknowledged" : true, "insertedIds" : [ ObjectId("61d8f6fdaa30ebeedffca107"), ObjectId("61d8f6fdaa30ebeedffca108") ] } #查看集合 > show tables; item itet system.users system.version > #save除了可以新增数据还可以替换数据 #新增一条数据 > db.users.save({"name":"lisi"}); WriteResult({ "nInserted" : 1 }) > show tables; users #新增多条数据 > db.users.save([{"name":"wangwu"},{"name":"maliu"}]); BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) #查询数据 > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "name" : "lisi" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "name" : "wangwu" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } #修改数据(id不存在就新增,id存在就修改) > db.users.save({ "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "name" : "lisiok" }); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "name" : "lisiok" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "name" : "wangwu" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } #只要我有id号,我就可以随便替换(全量替换) > db.users.save({ "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI" }); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "name" : "wangwu" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } #save方法无法批量修改,只能一条一条的修改 > db.users.save([ ... { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django" }, ... { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "Python" : "flask" }]) BulkWriteResult({ "writeErrors" : [ { "index" : 0, "code" : 11000, "errmsg" : "E11000 duplicate key error collection: users.users index: _id_ dup key: { _id: ObjectId('61d8fafdaa30ebeedffca10b') }", "op" : { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django" } } ], "writeConcernErrors" : [ ], "nInserted" : 0, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) > db.users.find() { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } >
更新操作符
$set操作符:用来指定一个键并更新键值,若键不存在则创建,只能修改第一个documnet
语法格式:db.COLLECTION_NAME.update({查询条件},{更新操作符:{更新内容}})
$set的作用总结:
db.users.update({"name":"张三",{$set:{"name":"张小三"}}})
2默认只修改符合条件的第一个document,如果需要全部修改,添加更新参数multi:true
#查看原始内容 > db.users.find() { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } #更新操作(有就修改,没有就追加,) > db.users.update({},{"$set":{"name":"set","age":30}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find() { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "set" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "maliu" } #使用multi参数可以对所有匹配的内容进行更新 > db.users.update({},{"$set":{"name":"multi","date":"20220108"}},{"multi":true}); WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "20220108" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "20220108" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "20220108" } #四个参数的用法,第三个参数直接写false,第四个参数true就代表multi的默认值是false > db.users.update({},{"$set":{"name":"multi","date":"2022"}},false,true); WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } >
3update方法应用规则:
db.集合名.update({条件},{更新逻辑},{"multi":true|false, "ipsert":true|false}); multi:是否批量更新多行数据,默认false upsert:更新逻辑匹配失效后,是否新增数据,默认false
如果是四个参数:
db.集合名.update({条件},{更新逻辑},true|false,true|false); 前面的true|false表示的是upsert,即更新逻辑匹配失败后是否新增 后面的true|false表示的是multi,即是否多行批量更新数据
[root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("3da29716-99b2-460e-888a-8257440fd1f6") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 > dn.users.find() 2022-01-08T06:31:24.053+0000 E QUERY [js] uncaught exception: ReferenceError: dn is not defined : @(shell):1:1 > use users; switched to db users > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } #如果第三个参数是false那么匹配不到内容就不做任何修改 > db.users.update({"name":"bjsxt"},{"$set":{"age":31}},false,true); WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } #如果第三个参数是true,那么匹配不到内容就新增 > db.users.update({"name":"bjsxt"},{"$set":{"age":31}},true,true); WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("61d93061adfe46eefd559f1f") }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 31 } #两种写法的结果一样,都是符合条件就修改,不符合条件的就新增 #db.users.update({"name":"bjsxt"},{"$set":{"age":31}},true,true); > db.users.update({"name":"admin"},{"$set":{"age":31}},{"multi":false,"upsert":true}); WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("61d93287adfe46eefd559f2b") }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 31 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 31 } >
其它操作符:
#对所有数据的年龄新增一岁,第一个false表示不做upsert新增,第二个true表示多行批量更新 [root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("ac966713-0e81-43a7-8e71-edc0923b47f9") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 > use users; switched to db users > db.users.find() { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 30, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 31 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 31 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 29 } > db.users.update({},{"$inc":{"age":1}},false,true); WriteResult({ "nMatched" : 6, "nUpserted" : 0, "nModified" : 6 }) > db.users.find() { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 31, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } >
$unset操作符:主要用来删除键,让键的值为空,在编写命令时$unset里field取值任意,无论给定什么值都表示删除,例如删除名称为王五的地址:db.users.update({"name":"王五"},{$unset:{address:"随意"}})
[root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("add9a406-922f-40dc-b934-117086d5830f") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 > db.users.find(); > use users; switched to db users > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "age" : 31, "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$unset":{"age":"22222"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > #经测试,$unset只会删除批量第一条数据里的字段 > db.users.update({},{"$unset":{"age":"22222"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$unset":{"age":"22222"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022" } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 }
添加时如果键存在,要求键值类型必须是数组,如果键不存在,则创建数组类型的键,例如:
向集合c1中所有文档的对象添加了数组类型属性hobby,并添加一个值写代码。如果再次执行,表示向hobby中添加一个值写代码,默认只修改符合条件的第一天,如果需要全部修改,添加multi属性 db.c1.update({},{$push;{hobby:"写代码"}},{multi:true})
[root@db01 ~]#docker exec -it mongd mongo admin Error: No such container: mongd [root@db01 ~]#docker exec -it mongod mongo admin MongoDB shell version v4.2.6 connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("4d593bf3-821b-41a9-bb0d-e6bc0102c671") } MongoDB server version: 4.2.6 > db.auth("tyjs09","123456"); 1 > use users; switched to db users > db.users.update({},{"$push":{"hobbies":"eat"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$push":{"hobbies":"sleep"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$push":{"hobbies":["a","b","c"]}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep", [ "a", "b", "c" ] ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 }
$pop操作符:删除数据元素。可取值只能是1或者-1.1表示尾部删除,-1表示头部删除,例如:
删除hobby中第一个元素。其中$pop中key时要操作的数组类型属性 db.c1.update({"name":"李四"},{$pop:{hobby:-1}})
> db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep", [ "a", "b", "c" ] ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > > db.users.update({},{"$pop":{"hobbies":1}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } >
删除hobby中元素内容为尚学堂视频,如果存在多个都删除。 db.c1.update({"name":"王五"},{$pull:{hobby:"尚学堂视频"}});
> db.users.update({},{"$push":{"hobbies":"eat"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep", "eat" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$push":{"hobbies":"eat"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "eat", "sleep", "eat", "eat" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } #删除数组中所有符合条件的数据 > db.users.update({},{"$pull":{"hobbies":"eat"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "sleep" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } >
操作符$pullAll:可以设置多个条件(删除数组中所有匹配的数据)
删除王五中hobby为写代码和看上学堂视频的值,其中属性(hobby)取值一定要时数组类型。 db.c1.update({name:"王五"},{"$pullAll":{hobby:["写代码","看尚学堂的视频"]}});
> db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "sleep", "eat", "eat", "eat" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$push":{"hobbies":"sleep"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ "sleep", "eat", "eat", "eat", "sleep" ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({},{"$pullAll":{"hobbies":["eat","sleep"]}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } >
操作符$rename:修改字段名(删除原字段后增加新字段)
修改王五的name属性为username db.c1.update({name:"王五"},{$rename:{name:"username"}});
> db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "name" : "xiaohong", "age" : 30 } > db.users.update({"_id" : ObjectId("61d932d3adfe46eefd559f30")},{"$rename":{"name":"username"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find(); { "_id" : ObjectId("61d8fa98aa30ebeedffca109"), "Python" : "FastAPI", "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "hobbies" : [ ] } { "_id" : ObjectId("61d8fafdaa30ebeedffca10b"), "Python" : "Django", "datenow" : "2022-01-08", "name" : "multi", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d8fafdaa30ebeedffca10c"), "name" : "multi", "datenow" : "2022-01-08", "date" : "2022", "age" : 1 } { "_id" : ObjectId("61d93061adfe46eefd559f1f"), "name" : "bjsxt", "age" : 32 } { "_id" : ObjectId("61d93287adfe46eefd559f2b"), "name" : "admin", "age" : 32 } { "_id" : ObjectId("61d932d3adfe46eefd559f30"), "age" : 30, "username" : "xiaohong" } >
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本