Mongodb时间差正在返回当前时间

Mongodb时间差正在返回当前时间,mongodb,Mongodb,这是我的mongo数据。我想将持续时间设置为登录和注销时间的差值。因此,我执行了以下查询: { "_id" : ObjectId("57693a852956d5301b348a99"), "First_Name" : "Sri Ram", "Last_Name" : "Bandi", "Email" : "chinni001sriram@gmail.com", "Sessions" : [ { "Class" : "

这是我的mongo数据。我想将
持续时间设置为登录和注销时间的差值。因此,我执行了以下查询:

{
    "_id" : ObjectId("57693a852956d5301b348a99"),
    "First_Name" : "Sri Ram",
    "Last_Name" : "Bandi",
    "Email" : "chinni001sriram@gmail.com",
    "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
}
但我得到的结果是:

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" : "chinni001sriram@gmail.com",
    "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
}
聚合管道应该为您提供一个具有此计算值的新字段,然后您可以使用结果上的游标方法来迭代结果中的文档并更新集合

以下示例显示了这一点:

Duration (sec) = (Logout_Time - Login_Time)/1000
查询结果

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为1778142655749042,注销时间为零,这将是一个全新的问题,请考虑为此创建一个。
{
    "_id" : ObjectId("57693a852956d5301b348a99"),
    "First_Name" : "Sri Ram",
    "Last_Name" : "Bandi",
    "Email" : "chinni001sriram@gmail.com",
    "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
}