利用Mongodb聚合(aggregate)来进行复杂查询的技巧

  • Post author:
  • Post category:其他


1、以多个key作为唯一键,分组查询

比如项目和主机地址(ip)有交叉关系,需要按ip和proj都不同的方式分组取出数据。

利用$group的_id对象分组,可以再用$project重命名。

db.Model.aggregate([
  {
    $group:{
      _id: {
        ip: '$ip',
        proj: '$proj' 
      }
    }
  },
  {
    $project:{
      ip: '$_id.ip',
      proj: '$_id.proj'
    }
  }
]);

2、数据值转换

  1. 字符串等转为Boolean值。
$project: {
  isError: {$eq: ['$state', 'error']}
}
  1. Boolean值转为数字1\0-1。
$project: {
  mistake: {$cmp: [false, '$isError']}
}

常用于$group前,将值转为数字1/0,在$group中利用$sum统计数目。



版权声明:本文为github_38589282原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。