mongDB:四、文档数据的常用增删改查操作

1. 插入文档

  • 单条文档插入

db.集合名称.insert({"name":"编程不良⼈","age":23,"bir":"2012-12-12"});

//实例:
db.test.insert({name:"小明酱",age:18,likes:["看电视","写代码",{none:2}]});
  • 多条文档插入
  1. insertMany插入
    文档插入需要数组,第二个options是可选值
    writeConcern: 1,//写⼊策略,默认为 1,即要求确认写操作,0 是不要求。
    ordered: true //指定是否按顺序写⼊,默认 true,按顺序写⼊。
 db.集合名称.insertMany(
 [ <document 1> , <document 2>, ... ],
 {
 writeConcern: 1,//写⼊策略,默认为 1,即要求确认写操作,0 是不要求。
 ordered: true //指定是否按顺序写⼊,默认 true,按顺序写⼊。
 } )

//实例
db.test.insertMany(
[{name:"小明酱",age:18,likes:["看电视","写代码",{none:2}]},
{name:"小明酱",age:18,likes:["看电视","写代码",{none:2}]}]
)
  1. insert插入

用单条insert方式也可以批量插入, 只需写成数组即可

 db.集合名称.insert([
 {"name":"不良⼈","age":23,"bir":"2012-12-12"},
 {"name":"⼩⿊","age":25,"bir":"2012-12-12"}
]);

//实例
db.test.insert([{name:"小明酱",age:19,likes:["看电视","写代码",{none:2}]},{name:"小明酱",age:19,likes:["看电视","写代码",{none:2}]}]);

  • 脚本方式
for(let i=0;i<100;i++){
 db.users.insert({"_id":i,"name":"编程不良⼈_"+i,"age":23});
}

//实例
for (var i = 0; i < 10; i++) {
	db.test.insert({_id:i,name:"小明酱"+i,age:20});
}

注意:在 mongodb 中每个⽂档都会有⼀个_id作为唯⼀标识,_id默认会⾃动⽣成如果⼿动指定将使⽤⼿动指定的值作为_id 的值。如果插入操作碰到id相同,会一直更新当前id
二、删除文档

db.集合名称.remove(
 <query>,
 {
 justOne: <boolean>,
 writeConcern: <document>
 } )

//实例
db.test.remove({_id:0,age:20});

参数说明:

  • query : 可选 删除的⽂档的条件。
  • justOne : 可选 如果设为 true 或1,则只删除⼀个⽂档,如果不设置该参数,或使⽤默认值 false,则删 除所有匹配条件的⽂档。
  • writeConcern : 可选:抛出异常的级别

三、更新文档

db.集合名称.update(
 <query>,
 <update>,
 {
 upsert: <boolean>,
 multi: <boolean>,
 writeConcern: <document>
 } );
//实例:
db.test.update({_id:1},{name:"小明傻"});

参数说明:

  • query : update的查询条件,类似sql update查询内where后⾯的。
  • update : update的对象和⼀些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后⾯的
  • upsert : 可选 ,这个参数的意思是,如果不存在update的记录,是否插⼊objNew,true为插⼊,默认是
  • false,不插⼊。
  • multi : 可选 ,mongodb 默认是false,只更新找到的第⼀条记录,如果这个参数为true,就把按条件查出来
    多条记录全部更新。
  • writeConcern : 可选 ,抛出异常的级别。
  1. 这个更新是将符合条件的全部更新成后⾯的⽂档,相当于先删除在更新
db.集合名称.update({"name":"zhangsan"},{name:"11",bir:new date()})
//实例:
db.test.update({_id:1},{name:"小明傻"});
  1. 保留原来数据更新,但是只更新符合条件的第⼀条数据

这里就会有个问题:更新的时候,更新的数据会将原来的数据删除在更新。所以我们需要使用$set,不在更新列表的key 不进行更新

db.集合名称.update({"name":"xiaohei"},{$set:{name:"mingming"}})

//实例
db.test.update({_id:1},{$set:{age:22}});
  1. 保留原来数据更新,更新符合条件的所有数据
 db.集合名称.update({name:”⼩⿊”},{$set:{name:”⼩明”}},{multi:true})
 //实例
db.test.update({name:"小明酱"},{$set:{age:22,sex:"男"}},{multi:true});

  1. 保留原来数据更新,更新符合条件的所有数据 没有条件符合时插⼊数据
 db.集合名称.update({name:”⼩⿊”},{$set:{name:”⼩明”}},{multi:true,upsert:true})
 //实例
 db.test.update({name:"小明酱酱"},{$set:{age:22,sex:"男"}},{multi:true,upsert:true});

四、文档查询

基本语法

db.集合名称.find(query, projection);
//查询全部实例
db.test.find();

参数说明

  • query :可选,使⽤查询操作符指定查询条件
  • projection :可选,使⽤投影操作符指定返回的键。查询时返回⽂档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的⽅式来读取数据(美化格式),可以使⽤ pretty() ⽅法,语法格式如下:

db.集合名称.find().pretty()
//实例
db.test.find().pretty();

与常规sql语法对比
在这里插入图片描述

//等于实例
db.test.find({age:22})
//小于实例
db.test.find({age:{$lt:22}})
//小于或等于实例
db.test.find({age:{$lte:22}})
//大于实例
db.test.find({age:{$gt:22}})
//大于或等于实例
db.test.find({age:{$gte:22}})
//不等于实例
db.test.find({age:{$ne:22}})

and操作

 db.集合名称.find({key1:value1, key2:value2,...}).pretty()
//实例
db.test.find({age:{$ne:22},name:"小明酱5"})

类似于 WHERE 语句:WHERE key1=value1 AND key2=value2

注意:如果查询条件出现两个或多个相同的key时只会以最后一个key为查询条件,前面的相同的都会被覆盖

//补充:查询区间值的时候{}中可以多加其他参数,不需要写多个key age
db.test.find({age:{$gt:20,$lte:22}})

or操作

//语法
db.集合名称.find(
 {
 $or: [
 {key1: value1}, {key2:value2}
 ]
 } )
//实例
db.test.find({$or:[{name:"小明傻逼"},{name:"小明酱酱"}]})

AND 和 OR 联合

db.集合名称.find({"age": {$gt:50}, $or: [{"name": "编程不良⼈"},{"name":
"MongoDB"}]})
//实例
db.test.find({sex:"男",$or:[{name:"小明傻逼"},{name:"小明酱酱"}]})

数组中查询

//执行数组查询,指定需要的数值中的值即可
db.test.find({likes:"看电视"})

$size 按照数组⻓度查询

db.test.find({likes:{$size:3}});

模糊查找

注意:在 mongoDB 中使⽤正则表达式可以是实现近似模糊查询功能
这里无需双引号,如果使用双引号会被认为是一个字符串

db.users.find({likes://});
//案例
 db.test.find({name://})

排序

 db.集合名称.find().sort({name:1,age:1})
 //案例
  db.test.find({name://}).sort({age:-1,_id:1})

sort中指定key 1 升序 -1 降序
如果文档数据不含这个键值对,则默认排最前面

分⻚


 db.集合名称.find().sort({条件}).skip(start).limit(rows)
 //案例
 db.test.find().skip(2).limit(2);

skip 为开始页,limit为一页展示多少

总条数

db.集合名称.count();

//案例
db.test.find().count();
db.test.count();

去重

	db.集合名称.distinct('字段')
	db.test.distinct("name");

类似与sql使用distinct

指定返回字段

db.集合名称.find({条件},{name:1,age:1})
- 参数2: 1 返回 0 不返回 `注意:1和0不能同时使⽤`
//案例
	db.test.find({name:"小明酱"},{name:0,age:0})
	db.test.find({name:"小明酱"},{name:1,age:1})

这里返回字段中只能要么全是1要么全是0,_id是必然会被返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值