MongoDB高级查询
1、比较运算符
- 小于:
$lt
(less than)
//年龄小于45
> db.test.find({age:{$lt:45}})
- ⼩于等于:
$lte
(less than equal)
//年龄小于等于45
> db.test.find({age:{$lte:45}})
- ⼤于:
$gt
(greater than)
//年龄大于45
> db.test.find({age:{$gt:45}})
- ⼤于等于:
$gte
//年龄大于等于45
> db.test.find({age:{$gte:45}})
- 不等于:
$ne
//年龄不等于45
> db.test.find({age:{$ne:45}})
2、范围运算符
$in
:匹配字段值在给定列表中的文档
//年龄为30,40,50
> db.test.find({age:{$in:[30,40,50]}})
$nin
:匹配字段值不在给定列表中的文档
//年龄不为30,40,50
> db.test.find({age:{$nin:[30,40,50]}})
3、逻辑运算符
- and:在json中写多个条件即可
格式:db.集合名称.find({条件1, 条件2})
//示例--年龄为40的男人
> db.test.find({age: 40, sex: "男"})
- or:使⽤
$or
, 值为数组, 数组中每个元素为json
格式:db.集合名词.find({$or:[{条件1}, {条件2}]})
//示例--年龄小于50或者性别为女
> db.test.find({$or:[{age:{$lt:50}}, {sex: "女"}]})
4、正则表达式
使⽤//
或$regex
编写正则表达式
- 格式1:
db.集合名称.find({name:/^张/})
//查询姓名以张开头
> db.test.find({name:/^张/})
- 格式2:
db.集合名词.find({name:{$regex:'^张'}})
//查询姓名以张开头
> db.test.find({name:{$regex:'^张'}})
5、limit和skip
- ⽤于读取指定数量的⽂档:
db.集合名称.find().limit(number)
//查询前两条数据
> db.test.find().limit(2)
- ⽤于跳过指定数量的⽂档:
db.集合名称.find().skip(number)
//查询除前两条以外的数据
> db.test.find().skip(2)
- 同时使用
db.集合名称.find().limit(number).skip(number)
或
db.集合名称.find().skip(number).limit(number) //效率更高
示例:
//查询前五条数据中后两条
> db.test.find().limit(5).skip(3)
//查询后三条数据中的前两条
> db.test.find().skip(3).limit(2)
6、自定义查询
使⽤$where
后⾯写⼀个函数, 返回满⾜条件的数据
格式:
db.集合名称.find({
$where:function() {
return this.条件;}
})
示例:
//查询年龄大于40
> db.test.find({
$where:function() {
return this.age>40;}
})
7、投影
在查询到的返回结果中, 只选择必要的字段:db.集合名称.find({条件(可省略)},{字段名称:1,...})
-
参数为字段与值, 值为1表示显示, 不显示则不用写
-
_id列默认是显示的, 如果不显示需要明确设置为0
//示例--显示name和age字段
> db.test.find({},{name:1, age:1})
//仅显示name字段
> db.test.find({},{name:1, _id:0})
8、排序
对集合进⾏排序:db.集合名称.find().sort({字段:1,...})
-
参数1为升序排列
-
参数-1为降序排列
示例:
//根据年龄升序排序
> db.test.find().sort({age:1})
//根据年龄降序排序
> db.test.find().sort({age:-1})
//根据name降序,再根据age降序
> db.test.find().sort({name:-1, age:-1})
9、统计个数
统计结果集中⽂档条数:
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
//统计年龄为50的个数
> db.test.find({age: 50}).count()
> db.test.count({age: 50})
注意:如果有find()
,需要在find()
中写条件,反之则在count()
中写条件。
10、去除重复
数据进行去重:db.集合名称.distinct('去重字段',{条件})
示例:
//对age去重--无条件
> db.test.distinct('age')
//对age去重,并且性别为男
> db.test.distinct('age',{sex:"男"})