当前位置:首页 > 开发 > 研发管理 > 正文

MongDB查询(1)——基本查询[五]

发表于: 2015-01-19   作者:eksliang   来源:转载   浏览:
摘要: MongDB查询 转载请出自出处:http://eksliang.iteye.com/blog/2174452 一、find简介 MongoDB中使用find来进行查询。 API:如下 function ( query , fields , limit , skip, batchSize, options ){.....}  参数含义: query:查询参数 fie

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都能接受
 
 
 

MongDB查询(1)——基本查询[五]

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1:装载测试数据,将测试数据加入新的数据库week8. 方法一:编写插入语句,将测试数据插入week8。 u
阅读背景:对于MongoDB 有初步的了解 阅读目的:详细的了解如何在Linux机器之上安装MongoDB 1 : 下
1. 查询语句组成 2. 查询语句关键字含义 2.1 LIMIT 类似于MySQL的LIMIT,用于限定查询记录数 2.2 WH
1. 查询语句组成 2. 查询语句关键字含义 2.1 LIMIT 类似于MySQL的LIMIT,用于限定查询记录数 2.2 WH
1. 查询语句组成 2. 查询语句关键字含义 2.1 LIMIT 类似于MySQL的LIMIT,用于限定查询记录数 2.2 WH
在这一节,我们要向大家介绍一下在Mybatis中想要实现in查询,Mapper文件应该怎么配置。 1)在com.my
历史记录非常有用,它能够显示谁在何时修改了哪行代码,以及修改的原因。它还可以显示该文件两个版
在考虑采取优化行动之前(比如添加索引或非范式化),应该知道当前的查询是怎样被处理的,还应该有
varchar和varchar2:varchar(可变字符串)是oracle7以前使用的,不支持各国的语言,varchar2支持。
10 查询
原文链接地址:http://www.cnblogs.com/lyhabc/p/3732942.html 这一节主要介绍MYSQL里的基本查询(MY
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号