mongodb计算对象字段的两个属性之间的差异

时间:2018-01-26 09:17:21

标签: ruby-on-rails mongodb mongoid

我有一个mongodb集合说customer我已将状态更改保存在status_changes作为对象,其中包含状态和值的状态和状态更改日期的键,如下所示:

Name    |        Status changes      |
--------------------------------------
Anil    | { "lead" : ISODate("2018-01-22T06:07:30.707Z"), "verification" : ISODate("2018-01-22T06:08:45.919Z"), "active" : ISODate("2018-01-22T06:11:24.468Z")}
---------------------------------------
Sudhir  | { "lead" : ISODate("2017-08-20T06:07:30.707Z"), "verification" : ISODate("2017-08-22T06:08:45.919Z")}

考虑到可能总共有3种状态(leadverificationactive),我如何获得以下格式的所有客户状态变化之间的平均时间状态更改只能在一个方向上进行,即lead - > verification - > active

请注意,我的问题与this不同,因为日期属于同一个对象字段。

1 个答案:

答案 0 :(得分:1)

你可以试试这个,这将返回工厂的过渡时间,我们可以将其转换为分钟或小时

db.col.aggregate(
    [
        {$project : {
            leadToVerification : { $subtract : ["$status.verification" , "$status.lead"] },
            verificationToActive : { $subtract : ["$status.active" , "$status.verification"] }
            }
        },
        {$group : {_id : null, leadToVerification : {$avg : "$leadToVerification"}, verificationToActive : {$avg : "$verificationToActive"}}}
    ]
)

输出

{ "_id" : null, "leadToVerification" : 86475212, "verificationToActive" : 158549 }