mongodb crud 之 query

mongodb查询的方法:

普通查询:

db.collection.find({field:"value"},{projection:1}) field 为查询条件字段,project为指定返回字段,值为1or0,分别代表返回与不返回。当指定字段返回后,_id默认返回,不需要_id 时需要带上_id:0
projection 不支持条件查询中带有以下操作 :
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返回文档;
所有的查询和聚合操作都会在内存中进行排序后在返回,避免这种情况,应该合理建立索引。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值