2017-05-09 192 views
2

的計數創建新的領域我已經在我的數據庫,爲此我需要統計Tripduration的,並且基於Tripdurations數量逐一介紹各"EndStation",這給"Tripcount"下面的一個新領域以下strucutre 。其他領域

"_id": 1, 
"Tripcount": 4, 
"Trips_out": [ 
    { 
     "EndStation": 3119, 
     "Tripcount": // This should be 3 
     "Tripduration": [ 
      544, 
      364, 
      34 
     ] 
    }, 
    { 
     "EndStation": 3081, 
     "Tripcount": // This should be 1 
     "Tripduration": [ 
      835 
     ] 
    } 

我開始用下面的查詢,但這個計算爲所有tripdurations,它提供了Tripcount : 4頂部:

db.mycollection.aggregate( 
    [ 
     { 
      "$addFields":{ 
      "Tripcount":{ 
       "$reduce":{ 
        "input":{ 
         "$map":{ 
         "input":"$Trips_out", 
         "in":{ 
          "$size":"$$this.Tripduration" 
         } 
         } 
        }, 
        "initialValue":0, 
        "in":{ 
         "$add":[ 
         "$$value", 
         "$$this" 
         ] 
        } 
       } 
      } 
      } 
     } 
    ] 
) 

怎麼可以這樣修改,使得它計數Tripdurations爲每個EndStation,並將其作爲新字段插入?

回答

1

使用$map,而不是$reduce如下:

db.mycollection.aggregate([ 
    { 
     "$addFields": {    
      "Trips_out" : { 
       "$map": { 
        "input": "$Trips_out", 
        "as": "trip", 
        "in": { 
         "EndStation" : "$$trip.EndStation", 
         "Tripcount": { "$size": "$$trip.Tripduration" }, 
         "Tripduration": "$$trip.Tripduration" 
        } 
       } 
      } 
     } 
    } 
]) 
+1

這是完美的,非常感謝。 – ffritz