mongoDb内嵌文档的数据查询
导读
本文档主要讲述在内嵌文档中数据的筛选,内容如下
- 获取内嵌文档某特定数据
- 获取多个内嵌文档的某特定数据
- 获取多层级内嵌文档中的某特定数据
- 获取内嵌文件特定数据,并利用排序和分页筛选
测试数据
{"name": "p1","uv": [{"uuid": "1" ,"channel": "c1","os": "o1","time": ISODate("2020-08-01 00:00:00")},{"uuid": "2" ,"channel": "c1","os": "o1","time": ISODate("2020-08-02 00:00:00")},],"pv":[{"uuid": "1" ,"ip": "127.0.0.2","browseInfo": [{"time" : ISODate("2020-08-02 00:00:00"),"url": "/to/index"}] },{"uuid": "2","ip": "127.0.0.1","browseInfo": [{"time" : ISODate("2020-08-02 00:00:00"),"url": "/to/index"}] }]
}
1,获取文档第一层数据
table: test
result: uv
where: name="p5"
db.test.aggregate(
[{"$match": {"name": "p5"}} ,{"$project": {"uv": "$uv" ,"_id": 0}}
])
2, 获取内嵌文档某特定数据
table:test
result: uv
where: name=p5 and uv.uuid = 1
db.test.aggregate(
[{"$match": {"name": "p5"}},{"$unwind": "$uv"},{"$match": {"uv.uuid": "1"}},{"$project": {"uv": 1 ,"_id": 0}}
])
3,获取多个内嵌文档特定数据
table: test
result: uv ,pv
where: name=p5 ,uv.uuid = 1 ,pv.uuid = 1
db.test.aggregate(
[{"$match": {"name": "p5"}},{"$unwind": "$uv"},{"$match": {"uv.uuid": "1"}},{"$unwind": "$pv"},{"$match": {"pv.uuid": "1"}},{"$project": {"uv": 1 ,"pv": 1 ,"_id": 0}}
])
4. 获取多层级内嵌文档
table:test
result: pv.browseInfo
where: name=p5 ,pv.uuid=1 ,pv.browseInfo.time>=2010-07-08 00:00:00 ,pv.browseInfo.time<=2020-09-08 00:00:00
方式一: 数据整理后进行条件筛选(推荐:虽然还未做性能测试,但可以预测在$unwind拆分时,非拆分的其它内嵌文档数据量超大,必然会影响其性能,所可在整理数据时过滤该数据)
db.test.aggregate(
[ {"$match": {"name": "p5"}} ,{"$unwind": "$pv"} ,{"$match": {"pv.uuid": "1"}} ,{"$unwind": "$pv.browseInfo"} ,{"$project": {"browseInfo": "$pv.browseInfo" ,"_id": 0}},{"$match": {"browseInfo.time":{"$gte": ISODate("2010-07-08 00:00:00") ,"$lte": ISODate("2020-09-08 00:00:00")}}}
])
方式二: 条件筛选后进行数据整理
db.test.aggregate(
[ {"$match": {"name": "p5"}} ,{"$unwind": "$pv"} ,{"$match": {"pv.uuid": "1"}} ,{"$unwind": "$pv.browseInfo"} ,{"$match": {"pv.browseInfo.time":{"$gte": ISODate("2010-07-08 00:00:00") ,"$lte": ISODate("2020-09-08 00:00:00")}}} ,{"$project" : {"browseInfo" :"$pv.browseInfo" ,"_id": 0}}
])
5, 获取内嵌文档数据,并以指定字段排序,且获取分页数据
table:test
result: pv.browseInfo
where: name=p5 ,pv.uuid=1 ,pv.browseInfo.time>=2010-07-08 00:00:00 ,pv.browseInfo.time<=2020-09-08 00:00:00
sort: pv.browseInfo.time=1
limit: page=1 ,size=1
db.test.aggregate(
[ {"$match": {"name": "p5"}} ,{"$unwind": "$pv"} ,{"$match": {"pv.uuid": "1"}} ,{"$unwind": "$pv.browseInfo"} ,{"$project": {"browseInfo": "$pv.browseInfo" ,"_id": 0}},{"$match": {"browseInfo.time":{"$gte": ISODate("2010-07-08 00:00:00") ,"$lte": ISODate("2020-09-08 00:00:00")}}} ,{"$sort": {"browseInfo.time": 1}},{"$skip": 1},{"$limit": 1}
])
6. 获取内嵌文档数据并以内嵌文档某字段分组
table: test
result: uv.channel ,$sum(uv.channel)
where : name=p5
group: uv.channel
db.test.aggregate([{"$match": {"name": "p5"}},{"$project": {"uv": 1}},{"$unwind": "$uv"},{"$group": {"_id": "$uv.channel" ,"count": {"$sum": 1}}},{"$project": {"channel": "$_id" ,"channelSize": "$count"}}
])
mongoDb内嵌文档的数据查询相关推荐
- spring mongodb内嵌文档查询
spring mongodb内嵌文档查询 代码示例 简化写法 spring mongodb内嵌文档查询示例. {"name": "zsParent", &quo ...
- MongoDB内嵌文档查询
MongoDB内嵌文档查询 示例数据结构 [{"name": "lisa", "age": 17,"friends": ...
- mongodb 内嵌文档 报这个错A bulk write operation resulted in one or more errors
很正常的添加报了这个错误,我才注意到数据的存储格式. 下面是测试的数据, 第一行是正常添加的数据,对他操作就没问题. 第二行的数据格式 可以看出赋了null值 第三行 是一个空的内嵌文档 第四行 是没 ...
- MongoDB进阶-内嵌文档查询
作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded), ...
- mongodb查询内嵌文档
mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{&qu ...
- mongodb 查询内嵌文档
原文:http://www.cnblogs.com/silentjesse/p/3598399.html mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XX ...
- 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
一.介绍 MONGODB 的表结构 很灵活 .主要还是因为 字段中可以包含 [ 数组].[内嵌文档]. 现在简单介绍一下 字段中的[ 数组].[内嵌文档]相关的一些操作 (为了方便理解,还是以表来理解 ...
- mongodb java 内嵌文档_MongoDB 内嵌文档
MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...
- MongoDB操作内嵌文档
作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...
最新文章
- [ios2]iOS 使用subversion管理iOS源代码 【转】
- 005_FastDFS分布式nginx访问
- CSS Grid layout布局
- iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
- 解析xml_Mybatis中mapper的xml解析详解
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
- C#程序集Assembly学习随笔(增补版,附图)_AX
- gitlab nginx php解析,GitLab-webhook-PHP 详解 GitLab Webhooks 自动部署应用服务器
- 【Sublime Text 3】Sublime Text 3 - cracked 3092
- 一款可以安利的MarkDown编辑器
- 阿里回应“拼多多员工淘宝账号被封”;微信脸书合办新冠病毒黑客马拉松;Kubernetes 1.18发布 | 极客头条...
- java多线程都有几种方式实现
- ORACLE—002:Create创作型
- 6万辆自动驾驶小车将入市!图扑软件构建车联网系统
- 【无标题】免费论文查重的方法;知网也可以免费查重啦
- 全球及中国建筑涂料市场盈利能力分析与产值规模预测报告2022版
- Sigmoid Belief Net
- Greasy Fork、GitHub、OpenUserJS
- 《Android项目实战-博学谷》应用图标欢迎界面
- ThinkPHP 配置详解