MongoDB操作符中的$elemMatch问题_MongoDB

来源:脚本之家  责任编辑:小易  

Query.GTE("value",3);大于等于>=3www.zgxue.com防采集请勿采集本网。

问题

如果MongoDB 数据库集合中仅存在一条记录

find({ name:\"bobquot.find({$or:[{ a:1 },{ b:2 }]}) With another field db,{ b,$or:[{ a:1 }.foo,中给出的例子如下 Simple: db;foo在mongodb中有$or 操作符的

{ "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), "name" : "赵小明", "used_name" : [ "赵明", "赵小朋" ], "age" : 16, "gender" : 0, "relatives" : [ { "name" : "赵刚", "relationship" : 0 }, { "name" : "秀英", "relationship" : 1 } ]}

在mongodb中有$or 操作符的,官网中给出的例子如下 Simple: db.foo.find({$or:[{ a:1 },{ b:2 }]}) With another field db.foo.find({ name:\"bob\",$or:[{ a:1 },{ b:2 }]})

我们执行查询

对于replica set 中的复secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过制在连接时指定或者百在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写

db.getCollection('Persion').find({"relatives.name": "赵刚", "relatives.relationship": 1})

GridFS是一种在MongoDB中存储大二进制文件的机制。使用GridFS存文件有如下几个原因: 利用Grid可以简化需求。要是已经用了MongoDB,GridFS就可以不需要使用独立文件存储架构。GridFS会直接利用

此时会得到结果吗?

MongoDB自身是不提供事务处理的。如果要实现事务操作,必须自己写实现代码。在为你的项目选定数据库的时候,要根据你的项目来量身选择。如果需要强事务操作的和数据一致性很高的地方,最好选择

最开始我想当然的以为是不会出现结果的,但结果往往与期望背道而驰。

什么,一瞬间我陷入了迷茫,Mongo的查询结果不是必须都满足所有条件的吗?

分析

不信邪的我又尝试了喜闻乐见的小白查询

db.getCollection('Persion').find({"name": "赵小明", "age": 18})

这次结果为空,嗯,这才是我熟悉的Mongo嘛?

那这两次查询有啥区别呢?不同有两点 是否为二级字段 是否为数组

那我们将数据改为

{ "_id" : ObjectId("5e6b4ef546b5f44e5c5b276d"), "name" : "赵小明", "used_name" : [ "赵明", "赵小朋" ], "age" : 16, "gender" : 0, "relative" : { "name" : "赵刚", "relationship" : 0 }}

继续执行查询

db.getCollection('Persion').find({"relatives.name": "赵刚", "relatives.relationship": 1})

GridFS是一种在MongoDB中存储大二进制文件的机制。使用GridFS存文件有如下几个原因: 利用Grid可以简化需求。要是已经用了MongoDB,GridFS就可以不需要使用独立文件存储架构。GridFS会直接利用

此次结果为空集

接下来尝试查询

db.getCollection('Persion').find({"relatives.name": "赵刚", "relatives.relationship": 0})

此次可得到一条结果

通过上述两次查询基本可以排除二级字段的影响

那就是数组的原因了,那具体是为什么呢?

将数据还原为最初的格式,继续进行不同的查询

db.getCollection('Persion').find({"relatives.name": "赵刚", "relatives.relationship": 2})

此次结果为空集

那我们可以得到结论,对于数组字段,每个查询条件仅需有数组中的一项满足条件即可,而不是数组中必须存在一项满足所有查询条件。

那如果我想达到后面的效果要怎么做呢?

解决

此时,我们需要用到我们今天的主角 $elemMatch ,它的官方定义是这样的:

The $elemMatch operator matches documents that contain an array field with at least one element that matches all the specified query criteria.

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

If you specify only a single condition in the $elemMatch expression, you do not need to use $elemMatch.

You cannot specify a $where expression in an $elemMatch.

You cannot specify a $text query expression in an $elemMatch.

那上边的查询我们可以改成

db.getCollection('Persion').find({"relatives":{"$elemMatch":{"name": "赵四", "relationship": 0}}})

此时可以得到结果,但

db.getCollection('Persion').find({"relatives":{"$elemMatch":{"name": "赵四", "relationship": 1}}})

结果为空集

结语

此操作符和索引也有一些不得不说的事,今天就不在这里细说了,之后我会专门总结一篇有关MongoDB索引相关的博客

等不及的看官可以自行百度Google一下。

总结

到此这篇关于MongoDB操作符之$elemMatch的文章就介绍到这了,更多相关MongoDB操作符之$elemMatch内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

有人需要的话自己体会。这是我自己想到的方法,也许还有更好的。BasicDBObject my_time=new BasicDBObject();my_time.append("$substr",new Object[]{"$in_time",8,2});DBObject time=new BasicDBObject();time.put("my_time",my_time);DBObject project=new BasicDBObject().append("$project",time);内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mongodb 管道的介绍及操作符实例
  • 基于mongodb数据库的数据类型和$type操作符详解
  • mongodb 实现主从读写分离实现的实例代码
  • mongodb教程之查询操作实例
  • 教大家8天学通mongodb——第一天 基础入门篇
  • sqlserver与mongodb结合使用nhibernate
  • mongodb查询操作限制返回字段的方法
  • mongodb开启权限认证的方法步骤详解
  • mongodb运行日志实现自动分割的方法实例
  • mongodb运维_动力节点java学院整理
  • 浅析mongodb性能优化的相关问题
  • mongodb优化心得分享
  • MongoDB java 怎么使用类似$substr的操作符
  • 在c#里面怎么写 mongodb大于等于操作符
  • MongoDB java 怎么使用类似$substr的操作符
  • 关于mongoDB的$or 怎么用java实现
  • 关于mongoDB的$or 怎么用java实现
  • 关于mongoDB的$or 怎么用java实现
  • mongodb的secondary可以支持写操作吗
  • 怎么用 mongoDB C++ API 操作GridFS存储大文件
  • mongoDB在 java中的事务怎么实现
  • 千万别用MongoDB?真的吗
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mongodbmongodb 管道的介绍及操作符实例基于mongodb数据库的数据类型和$type操作符详解mongodb 实现主从读写分离实现的实例代码mongodb教程之查询操作实例教大家8天学通mongodb——第一天 基础入门篇sqlserver与mongodb结合使用nhibernatemongodb查询操作限制返回字段的方法mongodb开启权限认证的方法步骤详解mongodb运行日志实现自动分割的方法实例mongodb运维_动力节点java学院整理浅析mongodb性能优化的相关问题mongodb优化心得分享mongodb常用操作命令大全mongodb各种查询操作详解mongodb数据库插入、更新和删除操mongodb 数据库操作--备份 还原 mongodb插入数据的3种方法mongodb中使用distinct去重的简单mongodb整库备份与还原以及单个cmongodb查询操作限制返回字段的方mongodb 实现远程连接php中mongodb数据库的连接、添加yum源安装mongodb图文教程mongodb基础入门之创建、删除集合操作mongodb 数据类型及mongoose常用curdnosql反模式 - 文档数据库篇mongodb入门教程之常用的运维技术介绍mongodb最大连接数设置失效的异常分析过程mongodb运行状态监控、性能分析工具mongo通用mapreduce程序复制hbase表数据mongodb快速入门笔记(三)之mongodb插入文mongodb中游标的深入学习
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved