M04-MongoDB数据库数据查询与聚合

input-查询过滤-清洗去重-聚合分组-output

MomgoDB条件查询

添加测试数据

db.users.insert({name:‘kiki’,age:18,city:‘BJ’})
db.users.insert({name:‘jiji’,age:16,city:‘ZZ’})
db.users.insert({name:‘lili’,age:17,city:‘KK’})
db.users.insert({name:‘bibi’,age:25,tags:[“java”,“python”],city:“CQ”})
db.users.save()
db.users.insertOne()
db.users.insertMany()

MongoDB查询与SQL对应关系

在这里插入图片描述
在MongoDB中叫方法而不是叫函数

MongoDB查询运算符

在这里插入图片描述

MongoDB数据查询、条件查询、过滤

db.users.find()
db.users.find({})
db.users.find({age:18})
db.users.find({age:{$gt:18})
db.users.find({age:{$it:18}})
db.users.find({age:{$ite:18}})
db.users.find({age:{$in:[18,19]}})
db.users.find({$or:[{age:18},name:'jiji']})
db.users.find({name:/.*i.*/})
db.users.find({name:null})
db.users.find({age:${$exists:false}})

MongoDB条件查询

大于:db.uses.find({age:{$gt:18}})
大于:db.uses.find({age:{$lt:18}})
数组:db.uses.find({age:{$in:[11,12,13]}})
排序:db.uses.find().sort(age:1)
投影:db.uses.find({age:{$lt:18}},{name:1,age:0})

MongoDB数据查询数组条件

精确匹配数组元素:db.uses.find({tags:["java","nosql"]})
无顺序and精确匹配:db.uses.find({tags:{$all:["java","nosql"]}})
至少匹配一个:db.uses.find({tags:"java"})
组合条件满足一个条件过滤:db.users.find({age:{$gt:15,$it:20}})
组合条件同时满足条件过滤:
db.users.find({age:{$elemMatch:{$gt:22,$it:30}}})

db.users.find({}) 最多可以显示20条数据,如果想要看更多可以输入it
db.users.find({name:/.*i.*/})  包含i的
db.users.find({name:/^i.*/})   i开头的
db.users.find({name:/.*i$/})   i结尾的

MongoDB嵌套数组文档条件查询

db.orders.insert([
{name:“kiki”,items:[{title:“mongodb”,count:1},{title:“java”,count:3}]},
{name:“jiji”,items:[{title:“iphone”,count:12},{title:“java”,count:7}]},
{name:“mimi”,items:[{title:“R”,count:5},{title:“python”,count:2}]}
]);
db.orders.find({“items.title”:“java”})
紧缺匹配:db.orders.find({“items”:{title:‘java’,count:3}})
or匹配:db.orders.find({KaTeX parse error: Expected 'EOF', got '}' at position 42: …items.count:1}]}̲) 任意元素满足条件:db.o…gt:3}’})
第0个元素满足条件的:db.orders.find({‘items.0.count’:{KaTeX parse error: Expected 'EOF', got '}' at position 5: gt:2}̲}) 多条件and查询:db.…gt:3,$it:100}"})

db.users.find({address:{country:china,city:CQ}})
db.users.find({“address.city”:“CQ”}})
db.users.find({age:18,“address.city”:“CQ”}})
db.users.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gt:18}̲,"address.city"…it:170}}})
db.users.find({“style.weight”:{$gt:50}}})

映射Project与过滤

MongoDB数据查询结果投影:只是结果字段的重新抽取

返回特定字段:

db.users.find({age:18},{name:1,age:1}) 等于18岁的返回name和age
db.users.find({age:{$gt:18}},{name:1,age:1}) 大于18岁的返回name和age
排除字段:
db.users.find({age:{$gt:18}},{name:0}) 大于18岁的不返回name
文档字段的抽取,1抽取 0排除

MongoDB去重Distinct

查询所有数据去重
db.users.distinct("name")
db.users.distinct("item.count")
条件查询数据后去重
db.users.distinct("name",{age:18})
db.users.distinct("item.count",{age:{$gt:18}})
等价命令:db.runCommand({distinct:"orders",key:"name"})

为了性能,尽力使用索引
支持选择语言,支持优先查询节点

MongoDB分组统计Group

MongoDB聚合分析方式:

聚合函数
聚合管道
MapReduce

db.collection.group({key,reduce,initial[,keyf][,cond][,finalize]})
3.4版本后过期,建议使用新的聚合:db.collection.aggregate()+$group或者db.collection.mapReduce()
2.2版本超过两万个文档,建议使用:db.collection.mapReduce()
2.3版本db.collection.group()阻塞其他执行

db.orders.group(
	{
		key:{name:1},
		cond:{},
		reduce:function(curr,result)
			{result.total += curr.price;},
		initial:{total:0}
	}
)

分组统计不同年龄段的用户

db.users.group({key:{age:1},cond:{age:{$gt:16}},reduce:function(curr,result){result.total += 1;},initial:{total:0}})

分组统计不同用户的订单总额

db.orders.group({key:{name:1},cond:{},reduce:function(curr,result){result.total += curr.price;},initial:{total:0}})
db.users.group({key:{city:1},cond:{},reduce:function(curr,result){result.total += 1;},initial:{total:0}})

面试题:

MongoDB的优点
MongoDB4.0新特性
MongoDB的存储引擎分几种
MongoDB的存储引擎的差别
如何筛选嵌套文档中的字段?
分组聚合统计每个用户的订单价格?
分组聚合统计每个用户的嵌套订单文档中的价格?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值