暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB 实用数组操作(3)

岛上码农 2021-08-28
399

前言

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

  • MongoDB 不专业指北(八):实用数组聚合操作(上)
  • MongoDB 不专业指北(九):实用数组聚合操作(中)

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

对字段做布尔转换

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


文章转载自岛上码农,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论