一、简介
MongoDB提供了db.collection.find() 方法可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。
二.db.collection.find()查询数据
语法
db.collection.find(query,projection)
| 
 参数  | 
 类型  | 
 描述  | 
| 
 query  | 
 document  | 
 可选. 使用查询操作符指定查询条件  | 
| 
 projection  | 
 document  | 
 指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段  | 
projection语法:
{ field1: <boolean>, field2: <boolean> ... }  
说明:
1或者true表示返回字段
0或者false表示不返回该字段
_id:默认就是1,没指定返回该字段时,默认会返回,除非设置为0是,就不会返回该字段。
指定返回字段,有时文档字段多并数据大时,我们指定返回我们需要的字段,这样既节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。
1. 查询数据
(1)返回集合中所有文档:
db.collection.find()
或者
db.collection.find({})
   
如同SQL语句:
SELECT * FROM TABLENAME
   
(2)指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段
语法:
db.orders.find({},{field1: <boolean>, field2: <boolean> ... })  
例子:
db.orders.find({},{"onumber":1,"cname":1})  
而_id默认设置是1,所有也返回回来
可以设置_id不返回
例子:
db.orders.find({},{"onumber":1,"cname":1,"_id":0})  
2. 根据条件查询
   (1)     等于条件查询       
语法:
db.collect.find({<field1>: <value1>,<field2>: <value2>, ... })  
例子:
db.orders.find({"onumber":"002"}) 
查找onumber=002的文档
(2) 比较操作符
$gt(大于)、$gte(大于或等于)、 $lt(小于)、 $lte(小于或等于)
语法:
{ <field1>: { <expression1> },<field2>: {<expression1> }, ... }  
1)$gt(大于)比较操作符
例子:
db.orders.find({"onumber":{$gt:"003"}})  
               
我们查找onumber>003的值只有004
2)$gte(大于或等于)与 $lte(小于或等于)联合查询并指定返回字段(通过第二参数)
例子:
db.orders.find({"onumber":{$gte:"002",$lte:"003"}},{"onumber":1,"cname":1}) 
   
我们查找002=<onumber<=003 并指定返回onumber和cname字段,而_id默认设置是1,所有也返回回来
(3) $or、和 $and 条件查询
      1)$and 条件查询 
语法:
{ $and: [ { <expression1> }, { <expression2> } , ... , ]}  
简单的用法的语法:
{ <field1>: <value1>,<field2>: <value2>, ...}  
例子:
db.orders.find({"onumber":"002","cname":"zcy2"})  
   
查找onumber=002 AND cname= zcy2 查询文档
2)$or(或者)条件查询
语法:
{ $nor: [ { <expression1> }, { <expression2> }, ... ] }  
例子:
db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]}) 
 
    我们条件onumber=002 OR cname= zcy1 查找只要符合onumber=002或者cname= zcy1条件的文档 
3) $or 和$and 联合条件查询
例子:
db.orders.find({$and:[{"date":"2015-07-01"},{$or:[{"onumber":"002"},{"cname":"zcy1"}]}]}) 
     
查询条件 date=2015-07-01and (onumber=002 OR cname=zcy1) 的文档,就是既等如date等于2015-07-01 并且要满足onumber等于002或者cname等于zcy1其中一个就可以。
(4)$in(包含)、$nin(不包含)条件查询
1)$in(包含)条件查询
语法:
    { field: { $in: [<value1>, < value2>, ...] } }  
例子:
db.orders.find({"onumber":{$in:["001","002"]}})
               
查询onumber in("001","002") 条件的文档,就是onumber等于001或者等于002 这个跟$or有点像,不过$or做为条件查询时,可以指定不同的字段: db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})
,而$in只针对一个字段。
2)$nin(不包含)条件查询   
语法:
{ field: { $nin: [<value1>, < value2>, ...] } }  
$nin(不包含)跟$in(包含)相反的,这里就不做具体的介绍
(5)$not(不等于) 条件查询
语法:
    { field: { $not: { < expression1> } } }  
$not操作符不能独立使用,必须跟其他操作条件一起使用(除$regex)
           
例子:
db.orders.find({"onumber":{$not:{$gt:"002"}}}) 
         
查找onumber不等于大于002的文档数据
(6)$exists用来判断一个field是否存在
语法:
{ field: { $ exists:  < boolean>  } }  
例子:
db.orders.find({"age":{$exists:true}}) 
没有age这个元素,什么都没返回
插入有age元素,在执行一下
         
(7)$mod取模并等于指定的值
语法:
{ field: { $mod: [ value, value2 ]} } 
对元素field值对value取模的,取模的值要value2的文档数据
例子:
db.orders.find({"age":{$mod:[5,1]}})  
        
对age元素的值和5取模,取模的值要等于1的文档数据
(8)null 查找元素不存在和元素对应的值为null的文档
语法:
{ field: null }
例子:
db.orders.find({"age":null})  
  
       1)      查找age元素存在并值等于null       
db.orders.find({"age":{$in:[null],$exists:true}}) 
(9) $type来匹配一个元素的类型
语法:
{ field: { $type: < number >} }
number 是MongoDB中使用的类型对应的类型值
| 
 类型  | 
 类型值  | 
|
| 
 Double  | 
 1  | 
|
| 
 String  | 
 2  | 
|
| 
 Object  | 
 3  | 
|
| 
 Array  | 
 4  | 
|
| 
 Binary data  | 
 5  | 
|
| 
 Undefined (deprecated)  | 
 6  | 
|
| 
 Object id  | 
 7  | 
|
| 
 Boolean  | 
 8  | 
|
| 
 Date  | 
 9  | 
|
| 
 Null  | 
 10  | 
|
| 
 Regular Expression  | 
 11  | 
|
| 
 JavaScript  | 
 13  | 
|
| 
 Symbol  | 
 14  | 
|
| 
 JavaScript (with scope)  | 
 15  | 
|
| 
 32-bit integer  | 
 16  | 
|
| 
 Timestamp  | 
 17  | 
|
| 
 64-bit integer  | 
 18  | 
|
| 
 Min key  | 
 255  | 
|
| 
 Max key  | 
 127  | 
|