Loading...
墨滴

岛上码农@公众号同名

2021/08/27  阅读:39  主题:默认主题

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

前言

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

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

对字段做布尔转换

使用$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 提供的聚合操作来看,可以实现很多非常实用的查询操作。但是组合一多起来,确实形式上也变得多起来,很难记得住。因此,在用到的时候再翻阅相应的示例就可以直接使用,这也是编写实用数组聚合操作这三篇文章的目的之一。 关注岛上码农

岛上码农@公众号同名

2021/08/27  阅读:39  主题:默认主题

作者介绍

岛上码农@公众号同名