MongoDB实战(三):MongoDB的高级查询

MongoDB的基本查询

MongoDB中使用find()来进行文档的查询,然后以非结构化的方式来显示返回的文档

MongoDB实战(三):MongoDB的高级查询

如果需要结构化返回,需要加上pretty()

MongoDB实战(三):MongoDB的高级查询

find()括号里可以设置两个参数,以逗号分隔。两个参数都必须是文档,第一个参数是查询条件,第二个参数是指定返回的字段,_id字段默认返回

例如:db.users.find({"name":"lzx"},{"name":1,"age":-1});

代表查询name为lzx的文档,返回name和age两个字段,name升序排列,age降序排列

MongoDB实战(三):MongoDB的高级查询

游标:

游标是一种容器,可以用来存放find执行结果。而放入游标的数据,无论是单条还是多条结果集,每次都只能提取一条记录

游标一般用来遍历结果集,通过hasNext()判断是否还有下一条数据,next()获取下一条数据

MongoDB实战(三):MongoDB的高级查询

MongoDB的条件查询

MongoDB的find()的第一个参数是查询条件文档,必须满足BSON格式,MongoDB提供了很多查询方式

与操作: db.users.find({"name":"lzx","age":21});   

查询同时name为lzx,age为21的文档

MongoDB实战(三):MongoDB的高级查询

或操作$or: db.users.find({$or:[{"name":"lzx"},{"age":21}]});

查询条件满足name为lzx或者age为21的文档

MongoDB实战(三):MongoDB的高级查询

大于操作$gt:db.users.find({"age":{$gt:19}})

查询年龄大于19的文档

MongoDB实战(三):MongoDB的高级查询

小于操作$lt:db.users.find({age:{$lt:21}})

查询年龄小于21的文档

MongoDB实战(三):MongoDB的高级查询

大于等于操作$gte:db.users.find({age:{$gte:20}});

查询年龄大于等于20的文档

MongoDB实战(三):MongoDB的高级查询

小于等于操作$lte:db.users.find({age:{$lte:20}});

查询年龄小于等于20的文档

MongoDB实战(三):MongoDB的高级查询

$type操作符用来查询文档中字段与指定类型匹配的数据,并返回结果

指定类型表如下所示:

Type Number Alias Notes
Double 1 “double”  
String 2 “string”  
Object 3 “object”  
Array 4 “array”  
Binary data 5 “binData”  
Undefined 6 “undefined” Deprecated.
ObjectId 7 “objectId”  
Boolean 8 “bool”  
Date 9 “date”  
Null 10 “null”  
Regular Expression 11 “regex”  
DBPointer 12 “dbPointer” Deprecated.
JavaScript 13 “javascript”  
Symbol 14 “symbol” Deprecated.
JavaScript (with scope) 15 “javascriptWithScope”  
32-bit integer 16 “int”  
Timestamp 17 “timestamp”  
64-bit integer 18 “long”  
Decimal128 19 “decimal” New in version 3.4.
Min key -1 “minKey”  

Max key

127 “maxKey”
官网文档:https://docs.mongodb.com/manual/reference/operator/query/type/index.html
示例:db.users.find({"name":{$type:2}});
查询name字段为String类型的文档

MongoDB实战(三):MongoDB的高级查询

是否存在$exists:db.users.find({"age":{$exists:true}});

查询age字段存在的文档

MongoDB实战(三):MongoDB的高级查询

取模$mod:db.users.find({age:{$mod:[10,1]}});

查询age对10取模等于1的文档

MongoDB实战(三):MongoDB的高级查询

不等于$ne: db.users.find({"age":{$ne:20}});

查询age不等于20的文档

MongoDB实战(三):MongoDB的高级查询

包含$in:db.users.find({"age":{$in:[19,21]}});

查询年龄在[19,21]这个数组里的字段

MongoDB实战(三):MongoDB的高级查询

不包含$nin:db.users.find({"age":{$nin:[19,21]}});

查询年龄不包含在[19,21]这个数组的文档

MongoDB实战(三):MongoDB的高级查询

取非$not:查询的所有条件都能取非

特定类型查询:null

查询age为null的字段:db.users.find({"age":null});

首先更新一条字段的age为null然后去查询

再测试查询不存在的字段时,发现如果字段不存在都会当null处理,都会被匹配到

MongoDB实战(三):MongoDB的高级查询

MongoDB的辅助查询

条数限制limit:db.users.find({"corse":null}).limit(2);

查出符合条件的前两条

MongoDB实战(三):MongoDB的高级查询

起始位置skip:db.users.find({"corse":null}).skip(3).limit(2);

跳过前三条记录,从第四条开始取,查出前两条

相当于SQL中的limit(4,2)

MongoDB实战(三):MongoDB的高级查询

排序sort:db.users.find({"corse":null}).limit(5).sort({"age":-1});

将查询到的记录按age降序排列

MongoDB实战(三):MongoDB的高级查询

MongoDB的聚合查询

SQL 操作/函数    mongodb聚合操作
where $match
group by $group
having $match
select $project
order by $sort
limit  $limit
sum() $sum
count() $sum
join

$lookup  

(v3.2 新增)