资讯专栏INFORMATION COLUMN

MongoDB 高级查询

Lin_YT / 1443人阅读

摘要:格式为查询条件显示与否的选项如排序可以按指定的某些字段排序,字段标记为的为升序,标记为的为降序。查询条件消除重复使用函数。格式为集合名指定字段查询条件如聚合管道是特有的一种管道型聚合查询方式。

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

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

关于Mongo Shell

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

官方说明:

基本查询功能 比较运算

: 等于

$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: /^Jaw+$/
} )

# 或
db.mycollection1.find( {
    name: {
        $regex: "/^Jasow?$"
    }
} )
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

常用的管道有:

$match:简单的根据条件过滤筛选

$group:将数据分组,一般配合一些统计函数,如$sum

$project:修改document的结构。如增删改,或创建计算结果

$lookup

$unwind:将List列表类型的Document进行拆分

$sort

$limit

$skip

语法格式为:

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

示例:

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

管道的Map Reduce

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19454.html

相关文章

  • SpringBoot高级MongoDB之如何新增文档

    摘要:本篇博文为的中一篇,前面介绍简单的查询使用,这一篇重点则放在插入数据基本使用首先是准备好基本环境,可以参考博文高级篇之基本环境搭建与使用高级篇之查询基本使用姿势新增一条数据一个基本数据称为,和不一样,没有强制约束哪些字段,可以随 本篇博文为mongodb的curd中一篇,前面介绍简单的查询使用,这一篇重点则放在插入数据; I. 基本使用 首先是准备好基本环境,可以参考博文 1812...

    sherlock221 评论0 收藏0
  • 一篇文章入门MongoDB

    摘要:既是数据库,又是内存数据库,而且它是现在最强大最流行的数据库。所以相对于的真内存数据库而言,只是将大部分的操作数据存在内存中。 MongoDB既是NoSQL数据库,又是内存数据库,而且它是现在最强大、最流行的NoSQL数据库。区别与别的NoSQL数据库,MongoDB主要是基于Documents文档(即一条JSON数据)的。 MongoDB的特点: NoSQL数据库 内存数据库 存储...

    felix0913 评论0 收藏0
  • MongoDB ( 三 )高级_状态返回和安全

    摘要:应答式写入就会给我们返回结果,结果里面包含的项目很多,这样我们就能更好的进行程序的控制和安全机制的处理。如下这个有用的另外一个用法命令行中使用该命令查看数据库是否连接成功返回表示数据库连接成功是查找并修改的意思。 在操作数据库时,对数据的修改是需要有足够的安全措施的,其实在实际工作中,我们用db.collections.update的时候不多,在修改时我们都会用findAndModif...

    superPershing 评论0 收藏0
  • MongoDB ( 四 )高级_find修饰符

    摘要:返回内容查询出来后显示的结果样式,可以用和控制是否显示。修饰符文件使用进行链接对应的集合声明变量,并把查询结果赋值给利用游标的进行循环输出结果。到此的基础操作就结束了,但是我们还没有结束呢,下一节我们会用配合使用哦 find查询操作是我们平时再开发中最常用的,也是重中之重。 find基本操作符 // 批量插入数据 var workmate1={ name:JSPang, ag...

    crossea 评论0 收藏0
  • MongoDB ( 五 )高级_索引

    摘要:插入两条数据建立全文索引需要注意的是这里使用关键词来代表全文索引,我们在这里就不建立数据模型了。全文索引查找表示要在全文索引中查东西。全文索引在工作还是经常使用的,比如博客文章的搜索,长文件的关键词搜索,这些都需要使用全文索引来进行。 索引 在认识索引的之前我们先建立一张表,并往其中插入200万条数据。 // test.js //生成随机数 function GetRandomNum(...

    focusj 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<