导读

本文档主要讲述在内嵌文档中数据的筛选,内容如下
-  获取内嵌文档某特定数据
-  获取多个内嵌文档的某特定数据
-  获取多层级内嵌文档中的某特定数据
-  获取内嵌文件特定数据,并利用排序和分页筛选

测试数据

{"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内嵌文档的数据查询相关推荐

  1. spring mongodb内嵌文档查询

    spring mongodb内嵌文档查询 代码示例 简化写法 spring mongodb内嵌文档查询示例. {"name": "zsParent", &quo ...

  2. MongoDB内嵌文档查询

    MongoDB内嵌文档查询 示例数据结构 [{"name": "lisa", "age": 17,"friends": ...

  3. mongodb 内嵌文档 报这个错A bulk write operation resulted in one or more errors

    很正常的添加报了这个错误,我才注意到数据的存储格式. 下面是测试的数据, 第一行是正常添加的数据,对他操作就没问题. 第二行的数据格式 可以看出赋了null值 第三行 是一个空的内嵌文档 第四行 是没 ...

  4. MongoDB进阶-内嵌文档查询

    作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded), ...

  5. mongodb查询内嵌文档

    mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{&qu ...

  6. mongodb 查询内嵌文档

    原文:http://www.cnblogs.com/silentjesse/p/3598399.html mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XX ...

  7. 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】

    一.介绍 MONGODB 的表结构 很灵活 .主要还是因为 字段中可以包含 [ 数组].[内嵌文档]. 现在简单介绍一下 字段中的[ 数组].[内嵌文档]相关的一些操作 (为了方便理解,还是以表来理解 ...

  8. mongodb java 内嵌文档_MongoDB 内嵌文档

    MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...

  9. MongoDB操作内嵌文档

    作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...

最新文章

  1. [ios2]iOS 使用subversion管理iOS源代码 【转】
  2. 005_FastDFS分布式nginx访问
  3. CSS Grid layout布局
  4. iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
  5. 解析xml_Mybatis中mapper的xml解析详解
  6. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
  7. C#程序集Assembly学习随笔(增补版,附图)_AX
  8. gitlab nginx php解析,GitLab-webhook-PHP 详解 GitLab Webhooks 自动部署应用服务器
  9. 【Sublime Text 3】Sublime Text 3 - cracked 3092
  10. 一款可以安利的MarkDown编辑器
  11. 阿里回应“拼多多员工淘宝账号被封”;微信脸书合办新冠病毒黑客马拉松;Kubernetes 1.18发布 | 极客头条...
  12. java多线程都有几种方式实现
  13. ORACLE—002:Create创作型
  14. 6万辆自动驾驶小车将入市!图扑软件构建车联网系统
  15. 【无标题】免费论文查重的方法;知网也可以免费查重啦
  16. 全球及中国建筑涂料市场盈利能力分析与产值规模预测报告2022版
  17. Sigmoid Belief Net
  18. Greasy Fork、GitHub、OpenUserJS
  19. 《Android项目实战-博学谷》应用图标欢迎界面
  20. ThinkPHP 配置详解

热门文章

  1. 2017第二届上海DAC体验
  2. 推箱子游戏的90个经典关卡
  3. 入门图形学:屏幕波爆特效
  4. VS2017登陆失败:我们无法刷新此账户的凭证、我们无法添加此账户发送请求时出错、评估期已结束,请登录以解除产品锁定
  5. vlan 虚拟局域⽹
  6. gitbook 插件 文章 TOC 目录
  7. 18岁、20岁、23岁、25岁、28岁、30岁
  8. 【CNNVD-201303-018】D-Link DIR-645 Routers 认证绕过漏洞复现
  9. 蓝海创意云×可米酷 || “360VR全景直播解决方案”亮相企业产品发布会
  10. 怎样将ppt转换成pdf软件