簡體   English   中英

MongoDB聚合和組嵌套字段

[英]MongoDB aggregate and group nested field

我有mongoDB使用像這樣的mongoose的結果:

{ 
"_id" : { "$oid" : "589f926267d836193b0773fd"} , 
"id" : "3" , 
"update_date" : "2017-02-11" ,    

"data":
[{ 
 "groupx" : 3 ,
 "speed" : 40 ,
 "lon" : "-6.242747" , 
 "lat" : "34.821839" ,
 "update_timestamp" : "1486852706749" ,
 "date" : { "$date" : 1486852706749}
} ,
{   
"groupx" : 3 , 
"speed" : 120 ,
 "lon" : "-6.7515" ,
 "lat" : "33.96547" ,
 "update_timestamp" : "1486852718771" ,
 "date" : { "$date" : 1486852714771}
} ,
{   
"groupx" : 4 , 
"speed" : 100 ,
 "lon" : "-6.9515" ,
 "lat" : "33.958047" ,
 "update_timestamp" : "1486852714771" ,
 "date" : { "$date" : 1486852714771}
} ,
{   
 "groupx" : 4 ,
 "speed" : 80 ,
 "lon" : "-6.92915" ,
 "lat" : "33.928047" ,
 "update_timestamp" : "1486852980615" ,
 "date" : { "$date" : 1486852980615
}
}]    
 }   

我希望按“ groupx ”對對象進行分組,並獲得每個groupx的速度平均值和總時間花費。

我像這樣使用聚合:

myModel.aggregate([
    { $match: {$and: rules } },
    {
        $project: {
            _id: 0,
            groupA: '$data.groupx', 
            speedA: '$data.speed',
            dateA: '$data.date'
        }},
    { $group: {
        _id: '$groupA',
        minDate: { $min: '$dateA'},
        maxDate: { $max: '$dateA'},
        avg_speed: { $avg: '$speedA'},
    }}
]).exec(function ( e, d ) {
console.log( d )
});

如果有人可以幫助完成此查詢。

    //Desired result:

{
_id:
group:3
avg_speed:80
time_spent:19223556 //diff between min and max date in group 3

},
{
_id:
group:4
avg_speed:9
time_spent:19223556 //diff between min and max date in group 4

}
...

謝謝你,對不起我的英語。

我自己回答:)

這可能對某人有幫助。

...
var id = req.params.id;
var rules = [{'_id' : id}];

{ $match: {$and: rules } },
    { $unwind : "$data" },
   { $project: {
          _id: 0,
          groupA: '$data.groupx',
          speedA: '$data.speed',
          dateA: '$data.date'
        }},
     { $group: {
        _id: '$groupA',
        avgSpeedB: {  $avg: '$speedA'},
        minDate: { $min: '$dateA'},
        maxDate: { $max: '$dateA'},
    }},
    { $project: {
             _id: 1,
            debutB: '$minDate',
            tempsSpentB: {$subtract: [ '$maxDate','$minDate']},
            distanceB: { $multiply: [ '$avgSpeedB',{$subtract: [ '$maxDate','$minDate']}]},
            avgSpeedB:1

    }}.exec(function ( e, d) {

       console.log( d );

  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM