mongodb查询内嵌文档
 
假设有这样一个文档:
db.XXX.remove();
db.XXX.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2", "age":23, "gender":"F"}, {"name":"BuleRiver3", "age":21, "gender":"M"}]});
不能使用db.XXX.find({"members":{"name":"BuleRiver1"}});进行查询,查询的结果是空集。只有完全匹配一个的时候才能获取到结果,因此:
db.XXX.find({"members":{"name":"BuleRiver1", "age":27, "gender":"M"}});
 
可以得到结果。
如果把键值进行颠倒,也得不到结果:
db.XXX.find({"members":{"age":27, "name":"BuleRiver1", "gender":"M"}});
 
得到的结果是空集
我们这样查询:
db.XXX.find({"members.name":"BuleRiver1"});
是可以查询出结果的。
如果需要两个属性:
db.XXX.find({"members.name":"BuleRiver1", "members.age":27});
也可以查询出结果。
我们再进行破坏性尝试:
db.XXX.find({"members.name":"BuleRiver1", "members.age":23});
也可以查询出结果。
 
不过我们应该注意到:BuleRiver1是数组中第一个元素的键值,而23是数组中第二个元素的键值,这样也可以查询出结果。
 
对于我们的一些应用来说,这显然不是我们想要的结果。所以我们应该使用$elemMatch:
db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":27}}});
可以查询出结果,而
db.XXX.find({"members":{"$elemMatch":{"name":"BuleRiver1", "age":23}}});
查询不出结果。因此,这正是我们想要的。

mongodb查询内嵌文档的更多相关文章

  1. C# mongodb中内嵌文档数组条件查询

    样例数据: {      "_id" : "1064621564857",      "cNo" : "1064621564857 ...

  2. MongoDB查询或修改内嵌文档

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

  3. mongodb内嵌文档的查询

    本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...

  4. 学习MongoDB 五: MongoDB查询(数组、内嵌文档)(二)

    一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是 ...

  5. MongoDB 内嵌文档

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

  6. MongoDB-4: 查询(二-数组、内嵌文档)

    一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是 ...

  7. mongodb内嵌文档的javaapi,增删改查

    数据结构: {"_id" : "000000001",  //Mongodb默认主键 "UID" : "000000001&quo ...

  8. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  9. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

随机推荐

  1. Yii2.0 权威指南

    Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发 Web 应用程序. 一.安装1.Composer 安装Composer是一个基于项目的依赖管理器,负责将PHP项目所依赖的包或库安装到项目 ...

  2. [转]手工实现RTTI

    运行时的动态类型检查(RTTI,Run Time Type Indentifiation)是c++中提供的一项语言机制,它主要用于判断多态对象的具体类型. 为什么不使用c++提供的RTTI功能  但c ...

  3. Brocade300 commands

    aaaconfig                  Configure RADIUS for AAA servicesad                         Specifies all ...

  4. LeetCode: Sort List 解题报告

    Sort List Sort a linked list in O(n log n) time using constant space complexity. 使用Merge Sort, 空间复杂度 ...

  5. centos7添加服务

    [Unit] Description=rockae Service After=network.target [Service] ExecStart=/bin/java -jar /usr/local ...

  6. Oracle 外键约束子表、父表

    CREATE TABLE employees(     employee_id      NUMBER(6),     last_name        VARCHAR2(25) NOT NULL, ...

  7. WPF 冒泡路由事件

    在WPF中,例如,可以构建一个包含图形的按钮,创建一个具有文本和图片混合内容的标签,或者为了实现滚动或折叠的显示效果在一个特定的容器中放置内容.甚至可以多此重复嵌套,直到达到您所希望的层次深度. 这种 ...

  8. WampServer安装环境

    今天在阿里云ESC服务器上,用的Window Server2012版本,安装WampServer时,报错msvcr100.dll缺失.上网下了好几次,也确定是64位的放到了C:\Windows\Sys ...

  9. css鼠标移动到文字上怎样变化背景颜色

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. CSS边框-属性详解

    图解CSS padding.margin.border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...