❖ MongoDB 高级查询

作者: Solomon_Xie | 来源:发表于2019-01-12 10:56 被阅读0次

参考官方文档(图文并茂非常好看):Getting Started - MongoDB Documentation

MongoDB的查询功能非常强大,同时有些地方也会有点复杂。所以需要下点功夫学习和操练才能用好。

关于Mongo Shell

当我们进入Mongo Shell客户端后,实际上是进入了一个Javascript语言的交互环境。
也就是说,MongoDB中的很多命令,尤其是包括定义函数等高级命令,实际上都是Javascript语言,甚至说可以是jQuery
了解了这点,一些高级命令如Aggregation学起来就会放松很多。

官方说明:


imageimage

基本查询功能

比较运算

  • : 等于
  • $lt: Less Than
  • $gt: Greater Than
  • $gte: Greater Than or Equal
  • $ne: Not Equal
# age大于等于18
db.mycollection1.find( { age:{$gt: 18} } )

逻辑运算

  • $and
  • $or
db.mycollection1.find( {
    $or: [
        { age: {$gte: 20} },
        { salary: {$gt: 5000} },
        { job: "HR" }
    ]
} )

范围运算

  • $in
  • $nin: Not In
db.mycollection1.find( {
    age: {
        $in: [10, 20, 30]
    }
} )

正则表达式

有两种方法:

  • /表达式内容/
  • {$regex: "表达式内容"}
db.mycollection1.find( {
    name: /^Ja\w+$/
} )

# 或
db.mycollection1.find( {
    name: {
        $regex: "/^Jaso\w?$"
    }
} )

limit和skip

# 限定显示条数
db.mycollection1.find().limit(数量)

# 跳过指定第几条数据
db.mycollection1.find().skip(2)

# 混合使用
db.mycollection1.find().limit(10).skip(3)

自定义函数查询

自定义查询是指使用自定义函数,格式为$where: function(){...}

db.mycollection1.find( {
    $where: function() {
        return this.age >= 18;
    }
} )

投影

即搜索的返回值中,只显示指定的某些字段。字段指为0的不现实,指为1的显示,默认为1。

# 格式为:
db.mycollection1.find(
    {查询条件},
    {显示与否的选项}
)

# 如:
db.mycollection1.find(
    {},
    { _id: 0, name: 1, age: 1 }
)

排序

可以按指定的某些字段排序,字段标记为1的为Asc升序,标记为-1的为Desc降序。

db.mycollection1.find().sort({  name:1, age:-1 })

统计

使用count()函数。

db.mycollection1.find().count()

db.mycollection1.count( {查询条件} )

消除重复

使用distinct()函数。

# 格式为:
db.集合名.distinct( "指定字段", {查询条件} )

# 如
db.mycollection1.distinct( 
    "job", 
    { age: {$lt: 40} } 
)

聚合管道 Aggregation

Aggregation是MongoDB特有的一种Pipline管道型、聚合查询方式。语法稍微复杂一些。

聚合管道可以达到多步骤的分组、筛选功能。这个管道中的每一个步骤,成为一个stage

imageimage

常用的管道有:

  • $match:简单的根据条件过滤筛选
  • $group:将数据分组,一般配合一些统计函数,如$sum
  • $project:修改document的结构。如增删改,或创建计算结果
  • $lookup
  • $unwind:将List列表类型的Document进行拆分
  • $sort
  • $limit
  • $skip
imageimage

语法格式为:

db.集合名.aggregate( [
    {管道表达式1},
    {管道表达式2},
    {管道表达式2}
] )

示例:

db.Orders.aggregate( [
    {$match: {
        status: "A"
    } },
    {$group: {
        _id: "$cut_id",
        total: { $sum: "$amount" }
    } }
] )
imageimage

管道的Map Reduce

imageimage

相关文章

  • spring date mongo mongotemplate使

    Spring数据MongoDB三:基本文档查询(查询,基本查询)(一) MongoDB高级查询[聚合] sprin...

  • Mongodb高级查询

    1. 判断是否是空的数组 2. 查询时array只返回满足条件的元素 unwind把嵌套的数组展开

  • mongodb高级查询

    主要参考下面两篇文章:Mongoose增查改删学习笔记mongodb官方文档 另外,在学习的过程中遇到的关于数组的...

  • ❖ MongoDB 高级查询

    参考官方文档(图文并茂非常好看):Getting Started - MongoDB Documentation ...

  • Mongodb 的高级查询

    关键词:mongodb, mongo, project, group, aggregate, 聚合管道, 高级查询...

  • MongoDB高级查询用法

    db的帮助文档 输入:db.help(); db.AddUser(username,password[, read...

  • MongoDB高级查询详细

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦。如果没有...

  • 108MongoDB 基础教程--高级查询与索引

    高级查询与索引 初始化环境 启动 MongoDB 服务,因为 MongoDB 并不随系统一起启动,可能以下命令运行...

  • Spring boot MongoDB 复杂查询

    1.Mongodb查询多个对象 2.Mongodb查询单个对象 3.Mongodb分页查询 4.Mongodb统计...

  • MongoDB

    MongoDB中文社区 环形队列存储,先进先出下载地址mongoose高级查询:.skip.limit.sort....

网友评论

    本文标题:❖ MongoDB 高级查询

    本文链接:https://www.haomeiwen.com/subject/wxqirqtx.html