2016-06-21 1 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を設定したいと思います。 モンゴブの時間差が現在時刻を返しています

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

結果? –

+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 } 
     } 
    ); 
}); 

クエリuは日に算術演算を実行する方法

{ 
    "_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、ログアウト時間はnull –

+0

これは新しい質問です。これを作成することを検討してください。 – chridam

関連する問題