使用聚合的MongoDB查询不返回预期结果

时间:2014-10-19 11:33:56

标签: mongodb mongodb-query aggregation-framework

我有一些文档看起来像这个例子:

{
  "_id": ObjectId("540f4b6496f35c16af001dc4"),
  "groups": [
    1,
    46105,
    46106,
    53241,
    55397,
    55406,
    62840
  ],
  "vehicleid": 123,
  "vehiclename": "123 - CAN BC",
  "totaldistancetraveled": 472.0,
  "date_num": 20140901
}

我需要找到所有属于46105组的车辆所驱动的总距离以及theie date_num与20140901匹配的位置。

我尝试了以下聚合查询:

db.vehicle_performance_monthly.aggregate(
           { $unwind : "$groups"},
           {$group:
           {_id: "$groups",           
           totalMiles: { $sum: "$totaldistancetraveled"}}},
           {$match:{_id: {$in:[46106]}},{"$date_num":{$in:20140901}}}
           )

但是没有返回多个匹配项。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这应该有效。

db.vehicle_performance_monthly.aggregate([ {
    $match : {
        groups : 46106,
        date_num : 20140901
    }
}, {
    $unwind : "$groups"
}, {
    $match : {
        groups : 46106
    }
}, {
    $group : {
        _id : "$groups",
        totalMiles : {
            $sum : "$totaldistancetraveled"
        }
    }
} ]);

分析您的原始答案:

db.vehicle_performance_monthly.aggregate(
       { $unwind : "$groups"},
       {$group:
       {_id: "$groups",           
       totalMiles: { $sum: "$totaldistancetraveled"}}},  // $group doesn't map "date_name" then it will lost.
       {$match:{_id: {$in:[46106]}},{"$date_num":{$in:20140901}}} // syntax error: {$match:{_id: {$in:[46106]}},{"$date_num":{$in:20140901}}}  should be   {$match:{_id: {$in:[46106]},"$date_num":{$in:[20140901]}}}
       )

$先匹配以提高效果