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