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. 黑客编程教程(一)了解Windows机制

    第一节 了解Windows机制 Windows 是一个“基于事件的,消息驱动的”操作系统. 在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动.单击鼠标等)该动作就会触 ...

  2. ny36 最长公共子序列

    最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...

  3. document对象和属性

    文档对象:整个Html都属于document,他封装了大量的功能: docum的属性: document.title //设置文档标题等价于HTML的<title>标签 document. ...

  4. linux oracle 查看版本

    1.查找 which sqlplus /u01/app/oracle/product/10.2.0/db_1/bin/sqlplus 可以带出 oracle 安装地址  2.登录 sqlplus 输入 ...

  5. tomcat架构分析(概览)

    出处:http://gearever.iteye.com Tomcat是目前应用比较多的servlet容器.关于tomcat本身的特点及介绍,网上已经有很多描述了,这里不再赘述.Tomcat除了能够支 ...

  6. iOS开关按钮UISwitch控件

    开关按钮UISwitch 在ViewController.h里面 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #import <UIKit/UIKit ...

  7. ios NSString format 保留小数点 float double

    self.orderCost.text = [NSStringstringWithFormat:@"%.1f元",self.order.cost.floatValue]; %.1f ...

  8. 基于jQuery带进度条全屏图片轮播代码

    基于jQuery带进度条全屏图片轮播代码.这是一款基于jQuery实现的oppo手机官网首页带进度条全屏图片轮播特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  9. 基于jQuery左右滑动切换图片代码

    分享一款基于jQuery左右滑动切换图片代码.这是一款基于jQuery实现的左右滑动切换焦点图代码.效果图如下: 在线预览   源码下载 实现的代码: <div class="v_ou ...

  10. Linux 目录容量查询和文件打包,清空

    查看使用情况 [root@instance-0yj8cprg ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 4. ...