MongoDB实战(三):MongoDB的高级查询
MongoDB的基本查询
MongoDB中使用find()来进行文档的查询,然后以非结构化的方式来显示返回的文档
如果需要结构化返回,需要加上pretty()
find()括号里可以设置两个参数,以逗号分隔。两个参数都必须是文档,第一个参数是查询条件,第二个参数是指定返回的字段,_id字段默认返回
例如:db.users.find({"name":"lzx"},{"name":1,"age":-1});
代表查询name为lzx的文档,返回name和age两个字段,name升序排列,age降序排列
游标:
游标是一种容器,可以用来存放find执行结果。而放入游标的数据,无论是单条还是多条结果集,每次都只能提取一条记录
游标一般用来遍历结果集,通过hasNext()判断是否还有下一条数据,next()获取下一条数据
MongoDB的条件查询
MongoDB的find()的第一个参数是查询条件文档,必须满足BSON格式,MongoDB提供了很多查询方式
与操作: db.users.find({"name":"lzx","age":21});
查询同时name为lzx,age为21的文档
或操作$or: db.users.find({$or:[{"name":"lzx"},{"age":21}]});
查询条件满足name为lzx或者age为21的文档
大于操作$gt:db.users.find({"age":{$gt:19}})
查询年龄大于19的文档
小于操作$lt:db.users.find({age:{$lt:21}})
查询年龄小于21的文档
大于等于操作$gte:db.users.find({age:{$gte:20}});
查询年龄大于等于20的文档
小于等于操作$lte:db.users.find({age:{$lte:20}});
查询年龄小于等于20的文档
$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类型的文档
是否存在$exists:db.users.find({"age":{$exists:true}});
查询age字段存在的文档
取模$mod:db.users.find({age:{$mod:[10,1]}});
查询age对10取模等于1的文档
不等于$ne: db.users.find({"age":{$ne:20}});
查询age不等于20的文档
包含$in:db.users.find({"age":{$in:[19,21]}});
查询年龄在[19,21]这个数组里的字段
不包含$nin:db.users.find({"age":{$nin:[19,21]}});
查询年龄不包含在[19,21]这个数组的文档
取非$not:查询的所有条件都能取非
特定类型查询:null
查询age为null的字段:db.users.find({"age":null});
首先更新一条字段的age为null然后去查询
再测试查询不存在的字段时,发现如果字段不存在都会当null处理,都会被匹配到
MongoDB的辅助查询
条数限制limit:db.users.find({"corse":null}).limit(2);
查出符合条件的前两条
起始位置skip:db.users.find({"corse":null}).skip(3).limit(2);
跳过前三条记录,从第四条开始取,查出前两条
相当于SQL中的limit(4,2)
排序sort:db.users.find({"corse":null}).limit(5).sort({"age":-1});
将查询到的记录按age降序排列
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 新增) |