mongo在聚合中使用temps

时间:2017-03-07 00:28:04

标签: mongodb aggregation-framework

我在这种格式的json中有一些飞行数据:

{"_id":{"$oid":"587d12881603f94800054dc5"},"flight_date":{"$date":"2015-08-23T00:00:00.000Z"},"flight_number":863,"destination_city":"    Baltimore, MD","delay_in_minutes":0.0,"cancelled":0.0}

我试图做的是找到取消航班比例最高的月份。我的代码按月对已取消的航班进行分组,并将每个航班除以该年度的航班总数。我想要做的是将每个月的取消航班除以该月的总航班数(取消和未取消),以便我获得适当的比率。

var size = db.flights.count();
db.flights.aggregate(
[
  {
    $project: {
             cancelled_flights: { $eq: [ "$cancelled", 1 ] },
             month: { $substr: [ "$flight_date", 5, 2 ] },
       }
  },
  {
$match: {"cancelled_flights" : false}
  },
  {
$group: {
        _id : "$month",
        total : {$sum : 1 },
}
  },
  {
       $project: {
              Total_Cancelled : "$total",
              Ratio : { $divide: [ "$total", size] } 
}
  },
         {$sort: {"Ratio":-1}},
         { $limit : 1 }

])

我只是在学习mongo,所以请指出我的错误,我会解决它们。

1 个答案:

答案 0 :(得分:1)

您可以使用$ cond对象

获取同一$组中已取消航班和未取消航班的总和
var gulp = require('gulp');
var rename = require('gulp-rename');

gulp.task('default', function() {
  return gulp.src('bower_components/openui5-*/resources/**/*')
    .pipe(rename(f => f.dirname = f.dirname.replace(/openui5-.*?\//, '')))
    .pipe(gulp.dest('out/'));
});

$ cond语句的工作方式类似于$ cond:[condition,如果为True,如果为False]

所以上面你会得到'如果匹配cond',1,如果没有,0

然后您可以使用这些结果进一步处理您选择的信息

小组活动将以1 $组合声明为您提供最终航班数,已取消航班总数和未取消航班总数。