MongoDB实战操作

$exists:匹配包含查询字段的文档
在这里插入图片描述
db.lyd.find({weg:{$exists:true}})
为true的时候包含weg字段的,false就是不包含该字段;
文档游标
.count 计算总数
在这里插入图片描述
db.lyd.count();
注意:count的数量不一定准确,尤其是在分布式的时候,数据随时都在进去的时候进出,还没提交完成也是很有可能的。只能作为一个预估值
计算当前总共的条数;
skip :跳过多少条;
limit:限制显示多少条;
在这里插入图片描述
限制显示一条
db.lyd.find().limit(1);
在这里插入图片描述
db.lyd.find().skip(1);
跳过第一条显示;
如果limit和skip要和count一起用那么;
db.lyd.find().skip(1).count(true);
db.lyd.find().limit(1).count(true);
在这里插入图片描述
排序sort
db.lyd.find().sort({age:1})
按年龄增序,
-1为降序
当同时应用 sort, skip, limit 时 ,应用的顺序为 sort, skip, limit
文档投影
选择性的返回数据
只显示年龄
db.lyd.find({},{age:1})
在这里插入图片描述
默认_id是都会显示的,如果不显示id那么
db.lyd.find({},{age:1,_id:0})
只有_id可以和其他字段不一样,其他字段必须都是一样的
正确示范
db.lyd.find({},{name:1,age:1,_id:0})
错误示范
db.lyd.find({},{name:0,age:1,_id:0})
返回数组部分元素slice
添加一个元素如下
db.lyd.insert({name:“zhangsan”,arr:[“one”,“two”,“thrre”]})
在这里插入图片描述
db.lyd.find({},{_id:0,name:1,age:1,arr:{$slice:1}})
在这里插入图片描述
在这里只显示了这个数组中的第一个元素;
如果是-1那么显示倒数第一个,如果是2那么就显示前两个,-2就倒数两个。

数组元素匹配elementMatch
我继续添加一条记录
db.lyd.insert({name:“lisi”,arr:[“two”,“thrre”,“four”]});
在这里插入图片描述

db.lyd.find({},{_id:0,name:1,age:1,arr:{$elemMatch:{$eq:“one”}}})
只有当数组中有one这个元素的时候才显示
在这里插入图片描述
更新操作
updateOne:修改一条记录;
updateMany:修改多条记录;
$set 给符合条件的文档新增一个字段,有该字段则修改其值
$unset 给符合条件的文档,删除一个字段
$push: 增加一个对象到数组底部
$pop:从数组底部删除一个对象
$pull:如果匹配指定的值,从数组中删除相应的对象
$pullAll:如果匹配任意的值,从数据中删除相应的对象
$addToSet:如果不存在则增加一个值到数组
依然是上面那个表将数组中有two字段的加一个字段。
在这里插入图片描述

db.lyd.updateMany({arr:“two”},{$set:{high:66}});
增加了一个high:66的字段,
如果要删除db.lyd.updateMany({arr:“two”},{$unset:{high:66}});

如果使用updateOne那么结果
执行:db.lyd.updateOne({arr:“two”},{$set:{high:77}})
在这里插入图片描述
只有一个成功;
公式:db.collection.update( query,update,options)
query定义了更新时的筛选条件
update文档提供了更新内容
options 声明了一些更新操作的参数
db.lyd.update()默认和updateOne一样,可以通过设置{multi: true}变成同时修改多个文档的操作。
db.lyd.update({arr:“two”},{$set:{high:77},{multi: true}})
更新操作符(都是添加update使用的)
$set 更新或新增字段
$unset删除字段
$rename 重命名字段
$inc 加减字段值
$mul 相乘字段值
$min 采用最小值
$max 次用最大值
db.lyd.update({name:“xsn”},{$inc:{age:+2}})
年龄+2;
db.lyd.update({name:“xsn”},{$min:{age:2}})
实际数值和2相比,取小的那个设置为当前的值;
删除文档remove
db.lyd.remove({“age”:16})
删除年龄为16的那一条数据;
删除集合drop
在这里插入图片描述
db.yy.drop();
直接删除结合,可以添加安全级别writeConcern
db.collection.drop( { writeConcern:})
MongoDB聚合操作aggregate
在这里插入图片描述
插入如上数据进行聚合操作aggregate,addFields,sum
db.lyd2.aggregate([{$addFields:{sumPrice:{$sum:“$orderLines.price”}}}])
计算每个peice的总值
在这里插入图片描述
可以选择多个字段
db.lyd2.aggregate([{$addFields:{sumPrice:{$sum:“$orderLines.price”},sumCost:{{$sum:“$orderLines.cost”}}}}])
排序操作
db.lyd2.aggregate([{$addFields:{sumPrice:{$sum:“$orderLines.price”}}},
{$sort: { sumPrice: -1}}])

获取字段信息
$orderLines : 用 $ 指示字段路径
$orderLines.price : 使用 $ 和 . 来指示内嵌文档的路径
聚合管道阶段
$project 对输入文档进行再次投影
$match 对输入文档进行筛选
$limit 筛选出管道内前 N 篇文档
$skip 跳过管道内前N篇文档
$unwind 展开输入文档中的数组字段
$sort 对输入文档进行排序
$lookup 对输入文档进行查询操作
$group 对输入文档进行分组
$out 对管道中的文档输出
(用之前lyd表来演示)
在这里插入图片描述

$project
db.lyd.aggregate({$project:{namexx:“$name”}})
在这里插入图片描述
db.lyd.aggregate({$project:{namexx:“$name”,_id:0,age:1}})
也可以灵活的控制要显示的内容
在这里插入图片描述
$match
db.lyd.aggregate({$match:{name:“lisi”}})
只显示名字为lisi的数据
在这里插入图片描述
match和project结合使用
db.lyd.aggregate([{$project:{_id:0,namexx:“$name”,age:1}},{$match:{namexx:“lisi”}}])
在这里插入图片描述
$limit
$skip

db.lyd.aggregate({$limit:1})
在这里插入图片描述
db.lyd.aggregate({$skip:1})
在这里插入图片描述
$unwind
将数组打平
构造数据
在这里插入图片描述
创建新的数据
然后执行:db.lyd3.aggregate({$unwind:{path:“$tags”}})
在这里插入图片描述
includeArrayIndex: 加上数组元素的索引值, 赋值给后面指定的字段
db.lyd3.aggregate({$unwind:{path:“$tags”,includeArrayIndex:“arrIndex”}})

在这里插入图片描述
preserveNullAndEmptyArrays:true
展开时保留空数组,或者不存在数组字段的文档
db.lyd3.aggregate({$unwind:{path:“$tags”,includeArrayIndex:“arrIndex”,preserveNullAndEmptyArrays:true}})
在这里插入图片描述
插入一条数据,可以看到当没有加入preserveNullAndEmptyArrays:true选项的时候是不显示qihao的。
$sort
对文档进行排序: 1 正序, -1 倒序
db.lyd3.aggregate({$sort:{age:-1}});
$lookup
$lookup:{
from: 需要关联的文档,
localField: 本地字段,
foreignField: 外部文档关联字段,
as 作为新的字段,添加到文档中
}
在这里插入图片描述
在这里插入图片描述

进行联表查询
db.address.aggregate(
{
$lookup:
{
from:“lyd4”,
localField:“aid”,
foreignField:"_id",
as: “field1”
}
}
);
得到结果
{ "_id" : ObjectId("603258224e91aac5b2e09f07"), "aid" : 1, "address" : [ "address1", "address2" ], "field1" : [ ] }

相对应的字段被显示了出来。
$group
$group:{
_id: 对哪个字段进行分组,
field1:{ accumulator1: expression1 }
}
group 聚合操作默认不会对输出结果进行排序
对于group ,聚合操作主要有以下几种
$addToSet :将分组中的元素添加到一个数组中,并且自动去重
$avg 返回分组中的平均值, 非数值直接忽略
$first 返回分组中的第一个元素
$last 返回分组中的最后一个元素
$max 返回分组中的最大元素
$min 回分组中的最小元素
$push 创建新的数组,将值添加进去
$sum 求分组数值元素和
插入数据
在这里插入图片描述
$addToSet
去重数组
在这里插入图片描述
得到结果
在这里插入图片描述
B和C的日期是一样的,被放在了去重数组中去了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值