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的一个表

语法:db.createCollection(name,options)

复制代码
[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的作用总结:

1只修改特定的Field,解决update默认修改整个document情况

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 }
> 
复制代码

其它操作符:

$inc操作符:可以对文档的某个值为数字型的键进行增减的操作,如果给定正数表示新增,如果给定负数表示减少。例如把王五的年龄减小5岁:db.users.update({"name":"王五"},{$inc:{age:-5}});

复制代码
#对所有数据的年龄新增一岁,第一个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 }
复制代码

$push操作符:向文档的某个数组类型的键添加一个数组元素,不过滤重复数据。

添加时如果键存在,要求键值类型必须是数组,如果键不存在,则创建数组类型的键,例如:

向集合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 }
> 
复制代码

操作符$pull:从数组中删除满足条件的元素,只要满足条件都删除。

删除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" }
> 
复制代码

 

 

posted @   linuxTang  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示