当前位置:
首页
文章
数据库
详情

MongoDB 实用数组聚合操作 (3)

前言

MongoDB 提供了 aggregate 聚合操作函数对多个文档进行筛选、排序、统计等操作,这些操作可以在上两篇中查看:

  • MongoDB 实用数组聚合操作 (1)
  • MongoDB 实用数组聚合操作 (2)

本篇是聚合操作的最后一篇,将介绍如何在聚合操作中实用条件比较。

对字段做布尔转换

使用$project 操作符时,可以对字段进行条件比较,从而转为布尔值,例如将年龄转换为是否超过30岁。

db.employees.aggregate(
  [
    {$match: {dept: '研发部'}},
    {
      $project: {
        name: 1, 
        dept: 1, 
        age: {$gt: ['$age', 30]}
        }
    }
  ]
);
{
    "_id" : ObjectId("60d734f0d8079507891982a8"),
    "name" : "岛上码农",
    "dept" : "研发部",
    "age" : false
}
{
    "_id" : ObjectId("60d734f0d8079507891982a9"),
    "name" : "Amy",
    "dept" : "研发部",
    "age" : true
}
{
    "_id" : ObjectId("60d734f0d8079507891982ab"),
    "name" : "Cathy",
    "dept" : "研发部",
    "age" : true
}
{
    "_id" : ObjectId("60d734f0d8079507891982ad"),
    "name" : "Jenny",
    "dept" : "研发部",
    "age" : false
}

条件匹配

在$match 中也可以通过条件进行过滤,比如找出研发部超过30岁的人员。

db.employees.aggregate(
  [
    {$match: {dept: '研发部', age: {$gt: 30}}},
    {
      $project: {
        name: 1, 
        dept: 1, 
        age: 1
        }
    }
  ]
);

组合条件将字段转换为布尔值

$project操作将字段转换为布尔值时也可以实用组合条件,例如将年龄在30岁以上,36岁以下的age字段转为 true,其他的转为false。

db.employees.aggregate(
  [
    {$match: {dept: '研发部'}},
    {
      $project: {
        name: 1, 
        dept: 1, 
        age: {
            $and: [{$gt: ['$age', 30]},{$lt: ['$age', 36]}]
        }
        }
    }
  ]
);
{
    "_id" : ObjectId("60d734f0d8079507891982a8"),
    "name" : "岛上码农",
    "dept" : "研发部",
    "age" : false
}
{
    "_id" : ObjectId("60d734f0d8079507891982a9"),
    "name" : "Amy",
    "dept" : "研发部",
    "age" : true
}
{
    "_id" : ObjectId("60d734f0d8079507891982ab"),
    "name" : "Cathy",
    "dept" : "研发部",
    "age" : true
}
{
    "_id" : ObjectId("60d734f0d8079507891982ad"),
    "name" : "Jenny",
    "dept" : "研发部",
    "age" : false
}

在 $match 中使用组合条件

$match 用于条件筛选,自然也是支持组合条件筛选的,同样的筛选出研发部大于30岁,36岁以下的人员:

db.employees.aggregate(
  [
    {
        $match: {
        dept: '研发部',
        $and: [
            {age: {$gt: 30}},
          {age: {$lt:36}},
        ]
      }
    },
    {
      $project: {
        name: 1, 
        dept: 1, 
        age: 1
        }
    }
  ]
);
{
    "_id" : ObjectId("60d734f0d8079507891982a9"),
    "name" : "Amy",
    "dept" : "研发部",
    "age" : 35
}
{
    "_id" : ObjectId("60d734f0d8079507891982ab"),
    "name" : "Cathy",
    "dept" : "研发部",
    "age" : 31
}

总结
从 MongoDB 提供的聚合操作来看,可以实现很多非常实用的查询操作。但是组合一多起来,确实形式上也变得多起来,很难记得住。因此,在用到的时候再翻阅相应的示例就可以直接使用,这也是编写实用数组聚合操作这三篇文章的目的之一。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。