2017-05-02 58 views
0

我想從checkout日期減去MongoDB中的簽入日期減去日期通過Mongo查詢由Pikking從Array

我該怎麼做?從MongoDB的

數據: -

"timeLogs" : [ 
     { 
      "type" : "chekin", 
      "date" : ISODate("2017-05-02T05:10:00.000Z"), 
      "_id" : ObjectId("590822c66216cf3864740e3d") 
     }, 
     { 
      "type" : "checkout", 
      "date" : ISODate("2017-05-02T14:10:00.000Z"), 
      "_id" : ObjectId("59088037feb56c0fcd60a090") 
     } 
    ] 

任何幫助將appriciated ..

+0

你嘗試過什麼? –

+0

結構非常差。 timeLogs總是包含2個條目? –

+0

是的,我試過$ subract(它提供了毫秒),是的timeLog總是有2個條目。 – hardy

回答

0

我不太清楚你是怎麼想的格式,BU可以試試這些辦法作爲一個日期或小時。

db.getCollection('Date').aggregate([ 
    { 
     $project: { 
       _id: "$_id", 
       startDate: { 
         $arrayElemAt: ["$timeLogs", 0] 
       },  
       endDate: { 
         $arrayElemAt: ["$timeLogs", 1] 
       } 
     } 
    }, { 
     $project: { 
       timeDiff: { 
        $divide: [{ 
         $subtract: ["$endDate.date", "$startDate.date"] 

         }, 1000 * 60 * 60] 


       } 

     }  

    } 
]) 

或日期

db.getCollection('sample date').aggregate([ 
    { 
     $project: { 
       _id: "$_id", 
       startDate: { 
         $arrayElemAt: ["$timeLogs", 0] 
       },  
       endDate: { 
         $arrayElemAt: ["$timeLogs", 1] 
       } 
     } 
    }, { 
     $project: { 
       timeDiff: { 
        $add: [new Date(0), { 
         $subtract: ["$endDate.date", "$startDate.date"] 

         }] 


       } 

     }  

    } 
]) 

對於蒙戈< 3.2

db.getCollection('Date').aggregate([ 
    { 
     $unwind: "$timeLogs" 
    }, 
    { 
     $group: { 
       _id: "$_id", 
       startDate: { 
         $first: "$timeLogs" 
       },  
       endDate: { 
         $last: "$timeLogs" 
       } 
     } 
    }, { 
     $project: { 
       timeDiff: { 
        $add: [new Date(0), { 
         $subtract: ["$endDate.date", "$startDate.date"] 

         }] 


       } 

     }  

    } 
]) 
+0

正在添加的錯誤 - '{ \t 「ERRMSG」: 「異常:無效運算符 '$ arrayElemAt'」, \t 「代碼」:15999, \t 「OK」:0 }:總failed' – hardy

+0

我編輯我的答案。看來你的mongo版本<= 3.2。您可以使用我剛剛添加的另一個。 –