如何从mongodb的两个日期得到差异的总和

Rav*_*nki 5 mongodb mongodb-query aggregation-framework

我想总结一下minuts中starttime和endtime的差异.

{
    "_id" : ObjectId("56cd544df7851e850d8b4573"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "1",
    "starttime" : ISODate("48118-03-20T01:35:14Z"),
    "endtime" : ISODate("48118-03-20T04:29:10Z")
}
{
    "_id" : ObjectId("56cd544df7851e850d8b4574"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "1",
    "starttime" : ISODate("48118-03-20T14:29:49Z"),
    "endtime" : ISODate("48118-06-22T12:52:36Z")
}
{
    "_id" : ObjectId("56cd544df7851e850d8b4575"),
    "user_id" : "281",
    "document_id" : "1455614372.pdf",
    "page_number" : "2",
    "starttime" : ISODate("48118-03-20T04:29:10Z"),
    "endtime" : ISODate("48118-03-20T14:29:49Z")
}
Run Code Online (Sandbox Code Playgroud)

我的收藏名称是pdftracker.

Bla*_*ven 5

您没有说明要对哪些字段进行分组,而是假设您想要“user_id”和“document_id”组合。不管怎样,它只是_id下面$group语句中的字段。

至于“间隔”,那么日期数学就在你这边,当你将$subtract一个Date对象与另一个对象进行比较时,结果就是以“毫秒”表示的“差异”。所以这又只需要一点转换:

db.collection.aggregate([
    { "$group": {
        "_id": { "user_id": "$user_id", "document_id": "$document_id" },
        "totalMinites": {
            "$sum": {
                "$divide": [
                    { "$subtract": [ "$endtime", "$starttime" ] },
                    1000 * 60
                ]
            }
        }
    }}
])
Run Code Online (Sandbox Code Playgroud)

简单的数学计算就可以得出$sum分组的总数。1000 毫秒乘以 60 秒(作为毫秒结果的除数)即可转换为分钟。