mongodb查询的方法:


普通查询:


db.collection.find({field:"value"},{projection:1}) field 为查询条件字段,project为指定返回字段,值为1or0,分别代表返回与不返回。当指定字段返回后,_id默认返回,不需要_id 时需要带上_id:0


:


1.$


2.$elemMatch


3.$slice


4.$meta


多条件查询组合,与:db.collection.find({field1:"value1",field2:{$lt:value2}})



多条件查询组合,或:db.collection.find({$or:[{field1:"value1"},{field2:{$lt:value2}}]})



多逻辑符组合查询,与或:db.collection.find({field1:"value1",$or:[{field2:"value2"},{field3:{$lt:value3}}]})


内嵌文档的查询:db.collection.find({"field.fieldSon":"value"})



查询集合中文档数量:db.collection.count()



分页查询:db.collection.find().sort().skip().limit()





关于sort(),skip()的先后顺序,人为的干预sort()与skip的先后顺序是不会影响到mongodb本身既定的先sort后skip的规则,



skip与limit的顺序也是如此,默认优化器都选择将skip()放置limit()前面,文档中是limit:limit+skip,再进行skip的操作,一样的意思



sort()与skip()的顺序:sort()在skip()()前面。







数组查询:



将带有value1或者value2的记录查找出来,db.collection.find({field:{$in:['value1','value2']}})



将field的值为['value1','value2']的记录查找出来 ,db.collection.find({field:['value1','value2']})



将field的值均包含数组元素value1和value2的值查找出来,db.collection.find({field:{$all: ['value1','value2']}})



数组元素查询可以使用 $lte、$gte、$lt、$gt



举例说明部分查询语句:



db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } ) 这条语句的意思就是查找出dim_cm的数组元素,其中一个大于15,另一个小于20,或者满足任意一个条件均可



db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } ) 类似这条,就只能两个条件都满足的记录才能查找出来



db.inventory.find( { "dim_cm.1": { $gt: 25 } } )



数组第二个元素大于25的记录



db.inventory.find( { "tags": { $size: 3 } } )



根据数组的长度查询记录



注意点:



数组元素精确查询的时候,顺序不能颠倒;



数组元素位置查询的时候注意条件的导航符号;



$elemMatch用与不用的区别。



游标




游标支持for和while循环,运用printjson和tojson得到查询结果,tojson 的用法:print(tojson());



游标遍历步骤:1.定义一个游标:var a=db.collection.find()



2.将结果依靠游标循环遍历打印:while(a.hasNext()){printjson(a.next());} 或者 a.forEach(printjson)



支持将游标转换成数组,根据下标进行查询操作:var b=a.toArray();printjson(b[1]);



游标的有效时间:默认情况下服务器会在游标不发生操作的十分钟后,或者游标中的文档用尽后自动关闭游标。如果想要游标长时间保持有效选择在驱动 上设置noCursorTimeout 的选项,或如下定义方法:var a=db.collection.find().noCursorTimeout(),为了不必要的资源损耗,记住操作后关闭游标,对游 标执行 close()方法,例如:a.close()



游标的限制:首批数据量不能超过16m或者101条文档,后续的按照每批不超过16m返回文档;



所有的查询和聚合操作都会在内存中进行排序后在返回,避免这种情况,应该合理建立索引。