在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功能
相关推荐
形式的标记,可轻易查询文档中内嵌的对象及数组。3.完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。4.查询监视:Mongo包含一个监控工具用于分析数据库操作性能...
MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和...
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的distinct的语句: 代码如下: db.users.distinct(‘last_name’) 等同于 SQL 语句: 代码如下: select DISTINCT last_name from users 表示的是根据...
494.3.1 null 494.3.2 正则表达式 504.3.3 查询数组 514.3.4 查询内嵌文档 534.4 $where查询 554.5 游标 564.5.1 limit、skip和sort 574.5.2 避免使用skip略过大量结果 584.5.3 高级查询选项 604....
2.4.5 内嵌文档类型 2.4.6 _id键和ObjectId对象 2.5 MongoDB的下载和安装 2.5.1 MongoDB的下载 2.5.2 在Windows平台下的下载与安装 2.5.3 在Linux平台下的下载与安装 2.6 MongoDB shell的使用 ...
2.4.5 内嵌文档类型 2.4.6 _id键和ObjectId对象 2.5 MongoDB的下载和安装 2.5.1 MongoDB的下载 2.5.2 在Windows平台下的下载与安装 2.5.3 在Linux平台下的下载与安装 2.6 MongoDB shell的使用 ...
查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。 Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合...
本文主要介绍的是关于MongoDB动态字段设计的相关资料,分享出来供大家参考学习,需要的朋友们下面来一起看看详细的介绍吧。 适宜读者人群 MongoDB开发者 ...内嵌文档索引 // 假如我们的文档长成了Object
mongo是一个高可用、分布式、面向集合的,模式自由的文档数据库。 mongo和传统关系数据库的最本质的区别在那里呢?就是其文档模型。 如何考虑MongoDB 文档模式设计的基本策略呢?一般建议的是先考虑内嵌,但是有一些...
最近在做项目的时候碰到一个对mongoDB的数据处理,从MongoDB中拿到内嵌文档的时间排序的list。 一开始考虑到直接对mongoDB中的属性排序,后面发现属性存在内嵌文档中,所以处理中需要用到聚合函数。 思考 (key)...
文档内嵌深度:BSON文档的结构(tree)深度最大为100。 二、Namespaces collection命名空间:.,最大长度为120字节。这也限定了database和collection的名字不能太长。 命名空间的个数:对于MMAPV1引擎,个数最大...
用来指定复杂的操作,比如增加、删除或者调整键,还可能是操作数组或者内嵌文档。 1.$inc 这个修改器干什么使的呢?看看下面示例的具体操作后的结果即可知道。 示例文档:{“uid”:”201203″,”type”:”1″,size:...
上一篇也说过,文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value 可能是“字符串”,可能是“数组”,又有可能是内嵌的一个JSON对象,相同的方式也适合...
使用Spring Data JPA和Mongo仓库 x. 67.10. 将Spring Data仓库暴露为REST端点 vii. 68. 数据库初始化 i. 68.1. 使用JPA初始化数据库 ii. 68.2. 使用Hibernate初始化数据库 iii. 68.3. 使用Spring JDBC初始化数据库 ...