2016-06-21 72 views
3
{ 
    "_id" : ObjectId("57693a852956d5301b348a99"), 
    "First_Name" : "Sri Ram", 
    "Last_Name" : "Bandi", 
    "Email" : "[email protected]", 
    "Sessions" : [ 
     { 
      "Class" : "facebook", 
      "ID" : "1778142655749042", 
      "Login_Time" : ISODate("2016-06-21T13:00:53.867Z"), 
      "Logout_Time" : ISODate("2016-06-21T13:01:04.640Z"), 
      "Duration" : null 
     } 
    ], 
    "Count" : 1 
} 

這是我的mongo數據。我想將duration設置爲登錄和註銷時間的差異。所以,我執行以下查詢:Mongodb在時間上的差異正在返回當前時間

db.sessionData.update(
    { "Sessions.ID": "1778142655749042"}, 
    { $set: { 
     "Sessions.$.Duration": ISODate("Sessions.$.Logout_Time" - "Sessions.$.Login_Time") 
     } 
    } 
) 

但我得到的結果是:

{ 
    "_id" : ObjectId("57693a852956d5301b348a99"), 
    "First_Name" : "Sri Ram", 
    "Last_Name" : "Bandi", 
    "Email" : "[email protected]", 
    "Sessions" : [ 
     { 
      "Class" : "facebook", 
      "ID" : "1778142655749042", 
      "Login_Time" : ISODate("2016-06-21T13:00:53.867Z"), 
      "Logout_Time" : ISODate("2016-06-21T13:01:04.640Z"), 
      "Duration" : ISODate("2016-06-21T13:02:58.010Z") 
     } 
    ], 
    "Count" : 1 
} 

和持續時間赤身設置爲當前時間/日期,而不是差異。

+2

怎麼可能u上日期進行算術運算? –

+0

那麼如何獲得差異? –

回答

1

你可以使用聚合框架使用$divide$subtract運營商給你在幾秒鐘之差爲時間做算術運算。該公式是由

Duration (sec) = (Logout_Time - Login_Time)/1000 

聚集管道給應該給你有這個計算值一個新的領域,然後你可以使用在aggregate()結果forEach()光標方法循環的結果的文件並更新收藏。

以下示例顯示了這一點:

db.sessionData.aggregate([ 
    { "$match": { "Sessions.ID" : "1778142655749042" } }, 
    { "$unwind": "$Sessions" }, 
    { "$match": { "Sessions.ID" : "1778142655749042" } }, 
    { 
     "$project": { 
      "Duration": { 
       "$divide": [ 
        { "$subtract": [ "$Sessions.Logout_Time", "$Sessions.Login_Time" ] }, 
        1000 
       ] 
      } 
     } 
    } 
]).forEach(function (doc) { 
    db.sessionData.update(
     { "Sessions.ID": "1778142655749042", "_id": doc._id }, 
     { 
      "$set": { "Sessions.$.Duration": doc.Duration } 
     } 
    ); 
}); 

查詢結果

{ 
    "_id" : ObjectId("57693a852956d5301b348a99"), 
    "First_Name" : "Sri Ram", 
    "Last_Name" : "Bandi", 
    "Email" : "[email protected]", 
    "Sessions" : [ 
     { 
      "Class" : "facebook", 
      "ID" : "1778142655749042", 
      "Login_Time" : ISODate("2016-06-21T13:00:53.867Z"), 
      "Logout_Time" : ISODate("2016-06-21T13:01:04.640Z"), 
      "Duration" : 10.773 
     } 
    ], 
    "Count" : 1 
} 
+1

這工作! thnku :) :) –

+0

你可以提供查詢,如果註銷時間爲空,並且我希望它作爲當前時間並同時獲取持續時間..所以匹配標準將在哪裏會話。 id是1778142655749042,註銷時間爲空 –

+0

這完全是一個新問題,請考慮爲此創建一個。 – chridam

相關問題