`

mongo查询内嵌文档

阅读更多

在mongo根据内嵌文档查询实例

Sql代码  收藏代码
  1. > db.teacher.find ()  
  2. {  
  3. “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”  
  4. “students” : [  
  5. {  
  6. "name" : "tom",  
  7. "age" : "14",  
  8. "hobby" : "volleyball"  
  9. },  
  10. {  
  11. "name" : "Lucy",  
  12. "age" : "15",  
  13. "hobby" : "football"  
  14. }  
  15. ]}  
  16.   
  17. {  
  18. “_id” : ObjectId(“4e255ad2717ed94f4532ac09″),“subject”:”Chinese”  
  19. “students” : [  
  20. {  
  21. "name" : "Mary",  
  22. "age" : "18",  
  23. "hobby" : "volleyball"  
  24. },  
  25. {  
  26. "name" : "Jack",  
  27. "age" : "14",  
  28. "hobby" : "football"  
  29. }  
  30. ]}  



查询 这些老师的学生里age=15 并且hobby是football的 。
如果使用

Sql代码  收藏代码
  1. db.teacher.find({"students":{"age":"15","hobby":"football"}})  



查询结果:无数据,因为内嵌文档如果使用这种直接方式查,必须要把students内容都包含进来,例:

Sql代码  收藏代码
  1. db.teacher.find({"students":{"name":"tom","age":"15","hobby":"football"}})  


但是这样的结果根本不是我们预期的,我们要查询的是只要两个限定条件。



但是可以用一种方法来代替,就是

Sql代码  收藏代码
  1. db.teacher.find({"students.age":"15","students.hobby":"football"})  


查询结果为:

Sql代码  收藏代码
  1. {  
  2. “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”  
  3. “students” : [  
  4. {  
  5. "name" : "tom",  
  6. "age" : "14",  
  7. "hobby" : "volleyball"  
  8. },  
  9. {  
  10. "name" : "Lucy",  
  11. "age" : "15",  
  12. "hobby" : "football"  
  13. }  
  14. ]}  
  15.   
  16. {  
  17. “_id” : ObjectId(“4e255ad2717ed94f4532ac09″),“subject”:”Chinese”  
  18. “students” : [  
  19. {  
  20. "name" : "Mary",  
  21. "age" : "18",  
  22. "hobby" : "volleyball"  
  23. },  
  24. {  
  25. "name" : "Jack",  
  26. "age" : "14",  
  27. "hobby" : "football"  
  28. }  
  29. ]}  



这也不是我们预期的,这其实是一种or操作,把所有学生年轻为15岁,或者学生爱好为足球的,都查出来了


解决方法:利用 $elemMatch 来实现组内查询


推荐
例 

Sql代码  收藏代码
  1. db.teacher.find("$elemMatch":{"students.age":"15","students.hobby":"football"})  



或者

Sql代码  收藏代码
  1. db.teacher.find({"students:"{"$elemMatch":{"age":"15","hobby":"football"}}})  



查询结果如下:

Sql代码  收藏代码
  1. {  
  2. “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”  
  3. “students” : [  
  4. {  
  5. "name" : "tom",  
  6. "age" : "14",  
  7. "hobby" : "volleyball"  
  8. },  
  9. {  
  10. "name" : "Lucy",  
  11. "age" : "15",  
  12. "hobby" : "football"  
  13. }  
  14. ]}  




这样我们就实现了内嵌文档的查询,主要采取了两个策略:

1,内嵌文档查询直接用 students.age 和 students.hobby

2,使用了$elemMatch 实现组内查询,实现 and功能

分享到:
评论

相关推荐

    Mongo学习文档参考手册

    Mongo 的索引机制可以对文档中的内嵌对象及数组建立索引,极大地提高了查询效率。 4. 查询监视:Mongo 包含一个监视工具用于分析数据库操作的性能。 Mongo 的查询监视工具可以帮助用户监视数据库的性能,提高查询...

    MongoDB常用的查询更新等操作汇总

    4. **内嵌文档查询**: 如果文档包含内嵌文档,可以像查询普通字段一样查询内嵌文档的属性。 5. **自定义查询逻辑**: - `$where` 允许使用JavaScript表达式进行更复杂的查询,如 `db.foo.find({"$where":...

    Mongo数据库

    5. 对象和 JSON 数据的存储,BSON 格式适合文档化存储和查询。 安装 MongoDB 的步骤: 1. 下载最新版本的安装包,根据操作系统选择合适的版本。 2. 解压缩安装包并将其 bin 目录下的 .exe 文件复制到指定目录,例如...

    Mongo DB 可视化工具 robo3t-1.4.3

    Mongo DB 是一个流行的开源、基于文档的分布式数据库系统,它以JSON格式存储数据,适合处理大量半结构化和非结构化数据。可视化工具是管理和操作Mongo DB的重要辅助手段,能够帮助用户更直观地查看和操作数据库。...

    如何有效提升MongoDB开发者的工作效率-周李洋 E叔

    3. 数据结构设计:E叔提出,在设计MongoDB的数据结构时,应优先考虑内嵌文档,因为这样可以减少关联查询的需要,充分发挥MongoDB非关系型数据库的优势。然而,内嵌并不总是最佳选择,特别是当需要独立查询内嵌部分或...

    MongoDB-使用手册-中文版pdf

    查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。 支持 RUBY,PYTHON,JAVA,C++,PHP等多种...

    MongoDB-索引

    5. 内嵌文档索引:对于内嵌文档,如 "comments.date",也可以创建索引: ``` db.test.ensureIndex({"comments.date":1}) ``` 6. 自定义索引名:可以为索引指定名称: ``` db.test.ensureIndex({"username":1},...

    MongoDB学习笔记

    日期类型可以使用JavaScript的Date对象表示,数组可以包含多个值,而内嵌文档则是将整个文档作为另一个文档的键值。这些数据类型的灵活性使得MongoDB能够适应各种复杂的数据结构。 在MongoDB中,插入文档可以单个...

    mongoDB(含java版本和spring整合版+图形界面工具及说明文档)

    - 文档数据库:MongoDB以BSON(二进制JSON)文档形式存储数据,支持嵌套数据结构,如数组和内嵌文档。 - 分布式架构:MongoDB是分布式的,支持分片(sharding)和复制集(replica sets),能轻松扩展到多台服务器...

    mongodb详细文档

    2. 游戏应用:存储玩家信息、装备、经验值等,内嵌文档结构便于查询。 3. 物流管理:订单信息存储,订单状态更新可通过内嵌数组跟踪。 4. 物联网:存储设备信息和日志,支持多维度分析。 5. 视频直播:存储用户信息...

    mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)

    MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和...

    高可用的MongoDB集群详解

    2.动态查询:Mongo支持丰富的查询方式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。3.完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。4....

    springboot之集成mybatis mongo shiro druid redis jsp

    在IT行业中,SpringBoot是一个备受推崇的框架,它简化了基于Spring的应用开发,提供了自动配置、内嵌式Web服务器和一站式的解决方案。本项目标题提到的"springboot之集成mybatis mongo shiro druid redis jsp"是一个...

    MongoDB性能优化

    1. 数据结构设计:MongoDB支持嵌入式数据模型,这允许在单个文档中存储相关数据,减少查询时的JOIN操作,从而提高性能。根据业务需求,合理设计数据结构,如尽可能地将关联数据内嵌,减少引用。 2. 分片策略:当...

    recipe-with-mongo

    总的来说,"recipe-with-mongo"项目是一个很好的学习和实践平台,可以帮助开发者掌握Spring Boot和Mongo DB的整合,了解如何在Java环境中开发基于文档的数据库应用。同时,它还涉及到Spring框架的响应式编程、微服务...

    电子书:MongoDB权威指南(中文版)

    514.3.4 查询内嵌文档 534.4 $where 查询 554.5 游标 564.5.2 避免使用skip 略过大量结果 584.5.3 高级查询选项 604.5.4 获取一致结果 614.6 游标内幕 63第5 章 索引 655.1 索引简介 655.1.1 ...

    go-mongo:与mongodb连接的简单Go项目

    MongoDB支持嵌入式文档和数组,这在Go中可以通过内嵌结构体和切片来实现。 8. **测试**: 为了确保代码正确无误,项目中通常会有测试用例。Go的`testing`包提供了一套完整的测试框架,可以在不连接实际数据库的...

    MongoDB可视化工具Mac版本

    它支持JSON格式的文档编辑,提供了丰富的查询构建器,使得复杂的查询操作变得直观。此外,还有导入导出数据的功能,方便数据迁移和备份。 3. 图形化查询构建器:Robo 3T提供了一个图形化的查询构建器,用户可以通过...

    robomongo图形管理工具

    - Shell集成:内嵌MongoDB Shell,可直接执行命令行操作。 - 文件导入导出:支持CSV、JSON等格式的数据导入导出,方便数据迁移。 - 安全管理:配置用户权限,管理认证机制,如SCRAM-SHA-1、MONGODB-CR等。 - ...

Global site tag (gtag.js) - Google Analytics