如何在一个子文档文档(MongoDB)中减去时间?

时间:2018-10-17 21:18:01

标签: mongodb mongodb-query

我已经使用数组概念创建了一个集合。

use test
db.time.insert({ "employeeid" : 1, "timing" : [{var : "temp", timein: new Date(), timeout: new Date()}]})

创建文档后,我在5分钟后更新了超时时间。

db.time.update({"employeeid" : 1, "timing.var" : "temp"},{$set : {"timing.$.timeout" : new Date()}})

我有两个查询。

1)我可以仅在timein,timeout fileds中存储时间(hh:mm:ss)吗?

2)我如何减去子文档超时值?

1 个答案:

答案 0 :(得分:0)

这是我的需要:

  

1)我可以仅在timein,timeout fileds中存储时间(hh:mm:ss)吗?

不,你不能。日期类型字段将始终是完整日期。但是,在阅读时,您可以选择仅阅读hh mm和ss部分 喜欢:

d.getHours()
d.getMinutes()

但是听起来太复杂了。 我能建议的最好的办法是使用毫秒。用户以timeInMillies而不是Date类型存储和读取特定时间。 mongo中有一个NumberLong字段,可以轻松比较,加,减,并且在阅读时可以将其转换回Date。


  

2)我如何减去子文档超时值?

如果要使用毫秒来消除1000的除数,我会在几秒钟内改变

db.time.aggregate([
    {
       $unwind:"$timing"
    },
    {
       $project:{
          diff:{
             $divide:[
                {
                   $subtract:[
                      "$timing.timeout",
                      "$timing.timein"
                   ]
                },
                1000
             ]
          }
       }
    }
])