mongodb基础命 二 mongodb高级查询

本文介绍了MongoDB的高级查询操作,包括比较运算符(如查找年龄大于等于18的人)、范围运算符(如$in和$nin)、逻辑运算符(如and和or的使用)、正则表达式匹配、limit和skip进行数据限制与跳过,以及自定义查询和投影、排序和统计等操作。通过实例展示了如何更高效地查询和过滤数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较运算符

等于: 默认是等于判断,没有运算符

小于: $lt (less than )

小于等于: $lte ( less than equal)

大于: $gt (greater than)

大于等于: $gte (greater than equal)

不等于 : $ne

 

在stu集合里查找年龄大于等于18的人

db.stu.find({age:{$gte:18}})

 

范围运算符

使用 $in $nin 判断是否在某个范围内

查询年龄为18 或者 28 的学生

db.stu.find({age:{$in:[18,28]}})

 

逻辑运算符

and : 在json中多写几个条件即可

年龄是20 并且 家乡是湖南

>db.stu.find({age:20,hometown:湖南})

年龄是20 并且 家乡是湖南,或者广州

>db.stu.find({age:20,hometown:{$in:["湖南","广州"]}})

 

or: 使用 $or ,值为数组,数组中每个元素为json

查询年龄大于18 或性别为 男 的学生

db.stu.find({$or:[{age:{$gt:18}},{sex:man}]})

 

组合使用

查询年龄大于18 或性别为 男 ,并且姓名是小明

db.stu.find({$or:[{age:{$gt:18}},{sex:man}],name:"xiaoming"})

 

支持正则表达式

使用//或者$regex 编写正则表达式

查询products集合中 sku 里面 以 abc 开头的 数据

db.products.find({sku:/^abc/})

查询products集合中 sku 里面 以 789 结尾的 数据

db.products.find({sku:{$regex:"789$"})

 

limit 和 skip

limit():用于读取指定数量的文档

db.集合名称.find().limit(数字)

查询两条学生信息

db.stu.find().limit(2)

 

skip(): 用于跳过指定数量的文档

db.集合名称.find().skip(数字)

查询时每次跳过两条学生信息

db.stu.find().skip(2)

 

也可同时使用

相当于翻页的效果

db.stu.find().limit(2).skip(2)

db.stu.find().skip(2).limit(2)

 

自定义查询

使用$where 后面写一个函数,返回满足条件的数据

查询年龄大于20的学生

db.stu.find()({
$where:function(){
return this.age>20;
}
})

 

投影

查询到的返回结果中,只选择必要的字段

对于_id是默认显示的

可以指定某些数据显示某些不显示 指定 1显示 指定0不显示

学生年龄大于18 的 姓名显示,_id不显示

db.stu.find({age:{$gt:18}},{name:1,_id:0})

 

排序

db.集合名称.find().sort({字段:1.....})

学生年龄按升序排序

db.stu.find().sort({age:1})

学生年龄按降序排序

db.stu.find().sort({age:-1})

注意:true 和 false 也可以排升序降序 -1 true在前 1false在前

 

统计个数

方法count()用于统计集合中的文档条数

db.集合名称.find({条件}).count()

db.集合名称.count({条件})

统计学生中年龄大于18的人数

db.stu.find({age:18}).count()

 

消除重复

方法distinct()对数据进行去重

db.集合名称.distinct("去重字段",{条件})

>db.stu.distinct('age')

['18','20','28','30']

可以得到一个去重后的数组

查询年龄大于20的学生来自哪里

>db.stu.distinct('hometown',{age:{$gt:20}})

['四川'.'广州']

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值