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. android studio - 解决Android Studio不停的Indexing的问题

    File > Invalidate Caches/Restart

  2. Oracle PLSQL Demo - 10.For Loop遍历游标[FOR LOOP CURSOR]

    declare cursor cur_emp is select t.* from scott.emp t; begin for r_emp in cur_emp loop dbms_output.p ...

  3. https编程遇到PKIX:unable to find valid certification path to requested target 的问题

    https编程遇到PKIX:unable to find valid certification path to requested target 的问题 2016-12-01 解决方案见:解决PKI ...

  4. C++面向对象程序设计的一些知识点(4)

    摘要:累继承可以实现源代码重用,模板技术也可以达到同样的目的.模板可以分为函数模板和类模板,其共同点是允许参数类进行类型化,编译器根据程序员传递的具体类型,又把函数模板实例化为具体函数,把类模板实例化 ...

  5. java jsp失效问题--待解决

    打印jps错误信息jps -J-Djps.debug=true -J-Djps.printStackTrace=true 未完待续...

  6. mproxy: c 语言实现的一个最小的http代理,支持FQ

    https://github.com/examplecode/mproxy mproxy 使用说明 这是一个微型的http代理服务器实现,使用c语言实现,核心代码量不足500行,不依赖任何第三方的库( ...

  7. SharePoint自动化系列——Set MMS field value using PowerShell.

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 本章将总结一下设置SharePoint list中item的Managed Metadata fi ...

  8. Cannon

    Description In Chinese Chess, there is one kind of powerful chessmen called Cannon. It can move hori ...

  9. Java Web开发中用Tomcat部署项目的三种方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...

  10. ios开发之修改 UITableview 滚动条颜色的方法

    UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显.您可以用下面这行代码来改变滚动条的颜色 self.tableView.indic ...