MongDB查询
转载请出自出处:http://eksliang.iteye.com/blog/2174452
一、find简介
MongoDB中使用find来进行查询。
API:如下
function ( query , fields , limit , skip, batchSize, options ){.....}
参数含义:
- query:查询参数
- fields:查询返回的列
- limit:返回结果上限 --可以利用它进行分页
- skip: 跳过多少个元素 --可以利用它进行分页
二.查询的限制
MongoDB在查询上面有些限制,传递给数据库的查询文档的值必须是常量。其实说白了就是不能引用文档中其他键的值。
例如库存表中有“in_stock”(剩余库存)和“num_sold”(已经售出)两个键,要想通过下列查询来比较两者是行不通的。
db.stock.find({"in_stock":this.num_sold}) //这样写是行不通的
三、MongoDB对AND、OR、IN的操作
参考实例一:AND操作
在MongoDB中向查询文档中加入多个键值对,将多个查询条件组合在一起,这样的条件会被解释成AND操作。例如,要想查询用户名为ickes而且年龄为25岁的用户。查询语句如下:
> db.users.find({"name":"ickes","age":25})
参考实例二:OR查询
例如:查询用户名为user1 或者 age为24的用户。查询语句如下:
db.users.find({"$or":[{"name":"user1"},{"age":24}]})
参考实例三:IN和NOT IN操作
其实说白了IN就是对单个字段的OR的一种简写。
例1:查询年龄等于16、24、32的用户。查询语句如下:
db.users.find({"age":{"$in":[16,24,32]}})
例2:查询年龄不等于13、17、21的用户。查询语句如下:
> db.users.find({"age":{"$nin":[13,17,21]}})
四.查询条件(>、>=、<、<=、!=)
在MongoDB中“$lt”、“$lte”、“$gt”、“$gte”分别代表比较操作符 <、<=、>、>=
参考实例一:查询年龄在18~30直接的用户
db.users.find({"age":{"$gt":18,"$lt":30}})
范围查询对日期最重要了。
参考实例二:查询用户的创建时间在2012年之前注册的用户
> createDate = new Date("2012-01-01")
> db.users.find({"create":{"$gte":createDate}})
参考实例三:不等于(!=),使用条件操作符"$ne"。
查询用户名不等于ickes的所有用户
> db.users.find({"name":{"$ne":"ickes"}})
五、MongoDB查询时对null的处理
null类型的行为确实有点奇怪。因为MongoDB对于键不存在和对{"key":null}的处理是一样的,所以要是有一个包含如下文档的集合。
> db.dept.find()
{ "_id" : 1, "name" : "东环应用1", "y" : null }
{ "_id" : 2, "name" : "东环应用2", "y" : "" }
{ "_id" : 3, "name" : "东环应用3" }
执行{"y":null}如下语句会发现把{ "_id" : 3, "name" : "东环应用3" }的文档也查询出来,例如:
> db.dept.find({"y":null})
{ "_id" : 1, "name" : "东环应用1", "y" : null }
{ "_id" : 3, "name" : "东环应用3" }
遇到这种情况,就得使用"$exists"用来判断键是否存在,单独使用"$exists"如下所示:
> db.dept.find({"y":{"$exists":true}})
{ "_id" : 1, "name" : "东环应用1", "y" : null }
{ "_id" : 2, "name" : "东环应用2", "y" : "" }
查询{"y":null}的文档参考实例如下:
> db.dept.find({"y":{"$in":[null],"$exists":true}})
{ "_id" : 1, "name" : "东环应用1", "y" : null }
记住这种特殊的写法,不是{"y":{"$exists":true},"y":null},这种写法行不通
六、MongoDB对于模糊查询的使用
首先需要明确一个概念,那就是MongoDB没有数据库的那种like查询,mongodb虽然没有like但是他的功能比关系型数据库的like更为强大,因为他使用的是正则表达式,这种处理字符串的神器。
参考实例一:查看部门名称为xl的部门(不区分大小写)
> db.dept.find({"name":/xl/i}) --这里的后缀i就是不区分大小写的标识
{ "_id" : 3, "name" : "XL" }
{ "_id" : 4, "name" : "xl" }
参考实例二:查看以ickes开头的部门
> db.dept.find({"name":/^ickes/})
{ "_id" : 1, "name" : "ickes1" }
{ "_id" : 2, "name" : "ickes2" }
参考实例三:查看以部门名称以1结尾的部门
> db.dept.find({"name":/1$/})
{ "_id" : 1, "name" : "ickes1" }
参考实例四:查看包含部门名称中包含"ck"的部门
> db.dept.find({"name":/.*ck.*/})
{ "_id" : 1, "name" : "ickes1" }
{ "_id" : 2, "name" : "ickes2" }
MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式,任何PCRE支持的正则表达式语法MongoDB都能接受
分享到:
相关推荐
### MongoDB数据库基本操作详解 #### 一、连接MongoDB数据库 MongoDB是一个广泛使用的开源文档数据库,支持多种编程语言。为了能够与MongoDB交互并执行各种数据库操作,首先需要通过官方提供的驱动程序或其他第三...
mongod.exe --install --dbpath=d:\mongodb\data --logpath=d:\mongodb\log\log.log -auth -serviceName "serviceName" 2.卸载服务 mongod.exe --remove --serviceName "serviceName" 3.启动服务 ...
1.2基本操作 1.2.1常用命令 1.2.2数据类型 1.2.3集合操作 1.2.3.1创建集合 1.2.3.2查看集合 1.2.3.3删除集合 1.2.4注意点 1.3增删改查 1.3.1插入数据 1.3.2查找数据 1.3.3更新数据 1.3.4删除数据 1.3.5符号 1.1基础...
相比于某些仅支持单一查询方式的NoSQL数据库,如Redis的键值查询或HBase的单索引,MongoDB在查询功能上更加全面,能够满足更多样的查询需求。 在数据安全性方面,MongoDB采用复制集(replica sets)来实现数据冗余...
装好环境变量的mongo后可以按 键盘上面的 window+R键 进入到mongo数据库的环境 此时的这个服务千万别关,最小化就可以了 然后再次window+R 键再开一个dos界面 输入mongo 就可以了 查看数据库相关的信息 ...
mongodb 数据库基本操作——对嵌入或嵌套文档的查询
《NoSQL Manager for MongoDB(5.8.3)——高效管理MongoDB数据库的利器》 在如今的大数据时代,MongoDB作为一款流行的NoSQL数据库,因其灵活的数据模型、高性能和可扩展性,被广泛应用于各种业务场景。而针对MongoDB...
MongoDB是一种流行的开源、分布式文档数据库,常被用于构建高性能、可扩展的数据存储解决方案。在Java开发中,MongoDB因其灵活的数据模型和优秀的性能而受到广泛欢迎,因此在面试中,掌握MongoDB的相关知识是非常...
### 2021Java字节跳动面试题——面向字节_MongoDB.pdf #### 知识点一:NoSQL数据库与RDBMS的区别及其应用场景 - **NoSQL数据库含义**:NoSQL(Not Only SQL)指的是非关系型数据库,这类数据库与传统的关系型...
### MongoDB基本操作——读取MongoDB中的数据 #### 一、引言 MongoDB是一款流行的NoSQL数据库系统,因其灵活性和高性能而广泛应用于各种场景。本文档将指导您完成从MongoDB读取数据的基本操作。这包括连接到MongoDB...
本课程“10天掌握MongoDB”旨在帮助学习者快速上手MongoDB的基本操作,包括增删改查等核心功能。 在MongoDB中,添加文档(Insert)是非常直观的。当向集合中插入文档时,系统会检查是否指定了唯一的标识符`_id`。...
本系统是本人初学MongoDb时所写,代码不是很完美,基本实现图书管理系统的增删改查等基本功能,目前尚有一处缺陷未解决——在查询后只能在控制台看到结果,没有反馈到界面上,有兴趣的朋友可以加以修改,相信这是一...
在本文中,我们将深入探讨MongoDB的架构及其基本操作,特别是关于双服务器架构和副本集(Replica Set)的配置。 首先,MongoDB的双服务器架构通常采用双Shard+Replica Set模式,这确保了数据的高可用性和冗余。每个...
在深入探讨MongoDB的学习和设计灵魂之前,我们先来理解MongoDB的基本概念和特性。 MongoDB采用NoSQL数据模型,它不同于传统的关系型数据库,如MySQL或Oracle,后者依赖于固定的表结构和行列式数据存储。MongoDB使用...
MongoDB提供了强大的查询语言——MQL(MongoDB Query Language),支持丰富的查询表达式和聚合框架。你可以根据字段、条件进行查询,并使用正则表达式、数组过滤等高级特性。 在性能方面,MongoDB支持索引,可以...
《Node应用程序构建:使用MongoDB和Backbone》是一本深入探讨使用Node.js、MongoDB以及Backbone.js构建高效网络应用的书籍。源码提供给读者更直观的学习体验,通过实际操作加深理论理解。以下是该书涉及的主要知识点...