MongoDB高级查询

本文详细介绍了MongoDB的高级查询方法,包括比较运算符(如$lt,$gt等)、范围运算符($in,$nin)、逻辑运算符($and,$or)、正则表达式、数据限制(limit,skip)、自定义查询、字段选择(投影)、排序以及统计功能。这些操作帮助用户更精确地查询和管理数据库文档。
摘要由CSDN通过智能技术生成

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编写正则表达式

  • 格式1db.集合名称.find({name:/^张/})
//查询姓名以张开头
> db.test.find({name:/^/})
  • 格式2db.集合名词.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:"男"})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值