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

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查询时对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更为强大,因为他使用的是正则表达式,这种处理字符串的神器。
> 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都能接受      

猜你喜欢

转载自eksliang.iteye.com/blog/2174452