在mongo根据内嵌文档查询实例
- > db.teacher.find ()
- {
- “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”
- “students” : [
- {
- "name" : "tom",
- "age" : "14",
- "hobby" : "volleyball"
- },
- {
- "name" : "Lucy",
- "age" : "15",
- "hobby" : "football"
- }
- ]}
- {
- “_id” : ObjectId(“4e255ad2717ed94f4532ac09″),“subject”:”Chinese”
- “students” : [
- {
- "name" : "Mary",
- "age" : "18",
- "hobby" : "volleyball"
- },
- {
- "name" : "Jack",
- "age" : "14",
- "hobby" : "football"
- }
- ]}
查询 这些老师的学生里age=15 并且hobby是football的 。
如果使用
- db.teacher.find({"students":{"age":"15","hobby":"football"}})
查询结果:无数据,因为内嵌文档如果使用这种直接方式查,必须要把students内容都包含进来,例:
- db.teacher.find({"students":{"name":"tom","age":"15","hobby":"football"}})
但是这样的结果根本不是我们预期的,我们要查询的是只要两个限定条件。
但是可以用一种方法来代替,就是
- db.teacher.find({"students.age":"15","students.hobby":"football"})
查询结果为:
- {
- “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”
- “students” : [
- {
- "name" : "tom",
- "age" : "14",
- "hobby" : "volleyball"
- },
- {
- "name" : "Lucy",
- "age" : "15",
- "hobby" : "football"
- }
- ]}
- {
- “_id” : ObjectId(“4e255ad2717ed94f4532ac09″),“subject”:”Chinese”
- “students” : [
- {
- "name" : "Mary",
- "age" : "18",
- "hobby" : "volleyball"
- },
- {
- "name" : "Jack",
- "age" : "14",
- "hobby" : "football"
- }
- ]}
这也不是我们预期的,这其实是一种or操作,把所有学生年轻为15岁,或者学生爱好为足球的,都查出来了
解决方法:利用 $elemMatch 来实现组内查询
推荐
例
- db.teacher.find("$elemMatch":{"students.age":"15","students.hobby":"football"})
或者
- db.teacher.find({"students:"{"$elemMatch":{"age":"15","hobby":"football"}}})
查询结果如下:
- {
- “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”
- “students” : [
- {
- "name" : "tom",
- "age" : "14",
- "hobby" : "volleyball"
- },
- {
- "name" : "Lucy",
- "age" : "15",
- "hobby" : "football"
- }
- ]}
这样我们就实现了内嵌文档的查询,主要采取了两个策略:
1,内嵌文档查询直接用 students.age 和 students.hobby
2,使用了$elemMatch 实现组内查询,实现 and功能
相关推荐
Mongo 的索引机制可以对文档中的内嵌对象及数组建立索引,极大地提高了查询效率。 4. 查询监视:Mongo 包含一个监视工具用于分析数据库操作的性能。 Mongo 的查询监视工具可以帮助用户监视数据库的性能,提高查询...
4. **内嵌文档查询**: 如果文档包含内嵌文档,可以像查询普通字段一样查询内嵌文档的属性。 5. **自定义查询逻辑**: - `$where` 允许使用JavaScript表达式进行更复杂的查询,如 `db.foo.find({"$where":...
5. 对象和 JSON 数据的存储,BSON 格式适合文档化存储和查询。 安装 MongoDB 的步骤: 1. 下载最新版本的安装包,根据操作系统选择合适的版本。 2. 解压缩安装包并将其 bin 目录下的 .exe 文件复制到指定目录,例如...
Mongo DB 是一个流行的开源、基于文档的分布式数据库系统,它以JSON格式存储数据,适合处理大量半结构化和非结构化数据。可视化工具是管理和操作Mongo DB的重要辅助手段,能够帮助用户更直观地查看和操作数据库。...
3. 数据结构设计:E叔提出,在设计MongoDB的数据结构时,应优先考虑内嵌文档,因为这样可以减少关联查询的需要,充分发挥MongoDB非关系型数据库的优势。然而,内嵌并不总是最佳选择,特别是当需要独立查询内嵌部分或...
查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。 支持 RUBY,PYTHON,JAVA,C++,PHP等多种...
5. 内嵌文档索引:对于内嵌文档,如 "comments.date",也可以创建索引: ``` db.test.ensureIndex({"comments.date":1}) ``` 6. 自定义索引名:可以为索引指定名称: ``` db.test.ensureIndex({"username":1},...
日期类型可以使用JavaScript的Date对象表示,数组可以包含多个值,而内嵌文档则是将整个文档作为另一个文档的键值。这些数据类型的灵活性使得MongoDB能够适应各种复杂的数据结构。 在MongoDB中,插入文档可以单个...
- 文档数据库:MongoDB以BSON(二进制JSON)文档形式存储数据,支持嵌套数据结构,如数组和内嵌文档。 - 分布式架构:MongoDB是分布式的,支持分片(sharding)和复制集(replica sets),能轻松扩展到多台服务器...
2. 游戏应用:存储玩家信息、装备、经验值等,内嵌文档结构便于查询。 3. 物流管理:订单信息存储,订单状态更新可通过内嵌数组跟踪。 4. 物联网:存储设备信息和日志,支持多维度分析。 5. 视频直播:存储用户信息...
MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和...
2.动态查询:Mongo支持丰富的查询方式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。3.完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。4....
在IT行业中,SpringBoot是一个备受推崇的框架,它简化了基于Spring的应用开发,提供了自动配置、内嵌式Web服务器和一站式的解决方案。本项目标题提到的"springboot之集成mybatis mongo shiro druid redis jsp"是一个...
1. 数据结构设计:MongoDB支持嵌入式数据模型,这允许在单个文档中存储相关数据,减少查询时的JOIN操作,从而提高性能。根据业务需求,合理设计数据结构,如尽可能地将关联数据内嵌,减少引用。 2. 分片策略:当...
总的来说,"recipe-with-mongo"项目是一个很好的学习和实践平台,可以帮助开发者掌握Spring Boot和Mongo DB的整合,了解如何在Java环境中开发基于文档的数据库应用。同时,它还涉及到Spring框架的响应式编程、微服务...
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 ...
MongoDB支持嵌入式文档和数组,这在Go中可以通过内嵌结构体和切片来实现。 8. **测试**: 为了确保代码正确无误,项目中通常会有测试用例。Go的`testing`包提供了一套完整的测试框架,可以在不连接实际数据库的...
它支持JSON格式的文档编辑,提供了丰富的查询构建器,使得复杂的查询操作变得直观。此外,还有导入导出数据的功能,方便数据迁移和备份。 3. 图形化查询构建器:Robo 3T提供了一个图形化的查询构建器,用户可以通过...
- Shell集成:内嵌MongoDB Shell,可直接执行命令行操作。 - 文件导入导出:支持CSV、JSON等格式的数据导入导出,方便数据迁移。 - 安全管理:配置用户权限,管理认证机制,如SCRAM-SHA-1、MONGODB-CR等。 - ...