MongoDB查询

一:find查询
1.查询全部 db.getCollection('document').find({})或者db.getCollection('document’').find()
2.部分查询 db.getCollection('document').find({"name":"value"})
3.键的筛选 键的筛选是查询时只返回自己感兴趣的键值,通过指定find的第二个参数来实现。这样可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗

       db.getCollection('document').find({},{"name":1,"password":1})
       通过指定find的第二个参数实现键的筛选。指定键的值为1则返回,为0则被过滤掉。默认"_id"键总是被返回,除非显式过滤({"_id":0})
   

二:查询条件
1.比较查询 $lt,$lte,$gt,$gte,$ne对应<,<=,>,>=,!=

      20 <= age <= 30  db.collection.find({"age":{"$gte":"20","$lte":"30"}}),此处age要和集合中的键值类型相同,否则可能查不出来
                     db.collection.find({"age":{"$gte":20,"$lte":30}}),查询和更新文档时,以$开头的键处的位置不同。条件句,比如$gte是内层文档的键;修改器如$inc是外层文档的键

2.关联查询

   $in用于查询一个键的多个值,$nin将返回与筛选数组中所有条件都不匹配的文档。将$in与$not组合可以实现$nin的效果
   db.collection.find({"age":{"$in":[20,25,26]}}) age为20,26的文档
   db.collection.find({"age":{"$nin":"[20,26]"}})age不为20,26,26的文档
   db.collection.find({"age":{"$not":{"$in":[20,26]}}}) 同上
   注:$in和$nin只能对单个键做or操作。如果需要对多个键进行or操作,需要使用$or,如:{"$or":[{条件1},{条件2}]}
   db.collection.find({"$or":[{"in":[20,26]},{"name":"xiaohei"}]})

三:特定类型的查询
1.null查询
null不仅能匹配自身还能匹配键不存在的文档
2.正则表达式

    db.collection.find({"name":/^user/})匹配以user开头的所有文档
    mongodb能为前缀型的正则表达式建立索引,所以此类型的查询效率较高

3.数组查询

    $all通过多个元素匹配数组 
    db.food.find({fruit:{$all:["banana"]}})匹配含有banana的数组
    db.food.find({"fruit.2":"peach"})查询数组指定位置的元素可以使用key.index的语法,下标从0开始。
    $size查询指定长度的数组
    db.food.find({"fruit":{"$size":3}})
    $slice返回数组的一个子集合
    db.collection.find({},{"listKey":{"$slice":1}})返回数组前一个元素
    db.collection.find({},{"listKey":{"$slice":-1}})返回数组最后一个元素
    db.collection.find({},{"listKey":{"$slice":[1,2]}})返回数组下标为1到2的元素
    $slice值为x则返回前x个元素,为-x则返回后x元素,为[x,y]则x表示偏移值,y表示返回的元素个数,即返回第x+1到第x+y个元素,如果x+y超出数组长度,则返回地x个元素后所有的元素

4.内嵌文档查询

    db.collection.find({"mapParams":{"key1":"value1","key2":"value2"}})
    db.collection.find({"mapParams.key1":"value1","mapParams.key2":"value2"})

四:$where查询

   $where查询是MongoDB的高级查询部分,可以执行任意JavaScript作为查询的一部分,是其他查询方式的一个补充
   $where查询需要将每个文档从BSON转换为JavaScript对象,然后通过$where的表达式来运行,该过程不能利用索引,所以查询速度较常规查询慢很多。如果必须使用时,可以将常规查询作为前置过滤,能够利用索引的话可以使用索引         根据非$where子句进行过滤,最后使用$where对结果进行调优。另一种方式采用映射化简-MapReduce.

五、游标

   游标是很有用的东西,MongoDB数据库使用游标来返回find的执行结果。客户端使用游标可以对最终结果进行有效的控制,比如分页,排序。
   (待补充)

相关文章

文章浏览阅读552次。com.mongodb.MongoQueryException: Quer...
文章浏览阅读635次,点赞9次,收藏8次。MongoDB 是一种 NoSQ...
文章浏览阅读2.1k次。和。_mongodb 日期类型
文章浏览阅读1.7k次。Scalestack等客户期待使用MongoDB Atla...
文章浏览阅读970次。SpringBoot整合中间件mongodb、ES_sprin...
文章浏览阅读673次。MongoDB 简介_尚医通sql