2017-08-31 518 views
0

假設下面是我的元素結構。我怎樣才能SHELL查詢mongodb並獲得每次旅行在db中的每次旅行所花費的平均差異(平均長度)?我猜測減去日期?但那麼如何減去,然後平均?如何彙總和平均兩個日期之間的時間?

"_id": { 
    "$oid": "5445ab058767000062" 
}, 
"comment": null, 
"scheduled_request": false, 
"status": "blah", 
"timestamp_started": { 
    "$date": "2014-10-21T00:38:28.990Z" 
}, 
"timestamp_transaction_complete": { 
    "$date": "2014-10-21T00:49:12.990Z" 
}, 
"user_id": "5445a9000057" 

UDPATE ======== 這裏是我的查詢

db.ambulance_requests.aggregate([ 
    { "$group": { 
    "_id": null, 
    "avg_time": { 
     "$avg": { 
     "$subtract": [ 
      "$timestamp_transaction_complete", 
      "$timestamp_started" 
     ] 
     } 
    } 
    }} 
]) 

和我的結果(從Mac終端Shell):

{ "_id" : null, "avg_time" : 0 } 

回答

0

$subtract$avg通過將它們應用於流水線階段。對於「一切」,用null爲分組鍵:

db.trips.aggregate([ 
    { "$group": { 
    "_id": null, 
    "avg_time": { 
     "$avg": { 
     "$subtract": [ 
      { "$ifNull": [ "$timestamp_completed", 0 ] }, 
      { "$ifNull": [ "$timestamp_started", 0 ] } 
     ] 
     } 
    } 
    }} 
]) 

當你$subtract從另一個BSON Date對象,不同的是返回它們之間的間隔毫秒。這也是用於提取毫秒值用於其他目的的通常方便的技術。作爲提供

您的單個文檔:

{ 
    "comment" : null, 
    "scheduled_request" : false, 
    "status" : "blah", 
    "timestamp_started" : ISODate("2014-10-21T00:38:28.990Z"), 
    "timestamp_completed" : ISODate("2014-10-21T00:49:12.990Z"), 
    "user_id" : "5445a9000057" 
} 

從問題的單個文檔的結果:

/* 1 */ 
{ 
    "_id" : null, 
    "avg_time" : 644000.0 
} 
+0

我矮波他和該avg_time爲0?我知道這並不準確。 {「_id」:null,「avg_time」:0} – jdog

+0

@jdog事實上,它甚至不可能,如果我使用問題中提供的數據,那麼我當然會得到兩個日期之間的差異。你正在做一些不正確的事情。在你的問題中顯示更多的文檔,並使用實際的mongo shell輸出,而不是從IDE轉儲,或者從你的位置獲取序列化格式。 –

+0

查看上面的更新。 – jdog

相關問題