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操作符用来查询文档中字段与指定类型匹配的数据,并返回结果

指定类型表如下所示:

TypeNumberAliasNotes
Double1“double” 
String2“string” 
Object3“object” 
Array4“array” 
Binary data5“binData” 
Undefined6“undefined”Deprecated.
ObjectId7“objectId” 
Boolean8“bool” 
Date9“date” 
Null10“null” 
Regular Expression11“regex” 
DBPointer12“dbPointer”Deprecated.
JavaScript13“javascript” 
Symbol14“symbol”Deprecated.
JavaScript (with scope)15“javascriptWithScope” 
32-bit integer16“int” 
Timestamp17“timestamp” 
64-bit integer18“long” 
Decimal12819“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 新增)

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值