MongoDB 高级查询

栏目: 数据库 · 发布时间: 5年前

内容简介:MongoDB的查询功能非常强大,同时有些地方也会有点复杂。所以需要下点功夫学习和操练才能用好。当我们进入

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

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

关于Mongo Shell

当我们进入 Mongo Shell 客户端后,实际上是进入了一个 Javascript语言 的交互环境。

也就是说,MongoDB中的很多命令,尤其是包括定义函数等高级命令,实际上都是Javascript语言,甚至说可以是 jQuery

了解了这点,一些高级命令如Aggregation学起来就会放松很多。

官方说明:

MongoDB 高级查询

基本查询功能

比较运算

:
$lt
$gt
$gte
$ne
# age大于等于18
db.mycollection1.find( { age:{$gt: 18} } )

逻辑运算

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

范围运算

$in
$nin
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

MongoDB 高级查询

常用的管道有:

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

MongoDB 高级查询

语法格式为:

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

示例:

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

MongoDB 高级查询

管道的Map Reduce

MongoDB 高级查询


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to MongoDB

The Definitive Guide to MongoDB

Peter Membrey、Wouter Thielen / Apress / 2010-08-26 / USD 44.99

MongoDB, a cross-platform NoSQL database, is the fastest-growing new database in the world. MongoDB provides a rich document orientated structure with dynamic queries that you’ll recognize from RDMBS ......一起来看看 《The Definitive Guide to MongoDB》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具