如何计算所有选定数据集的平均时间值?

问题描述 投票:0回答:1

我的数据库中有多个具有这种结构的文档:

{
    "_id" : ObjectId("5d7f6a937563a63c1d8b4639"),
    "admission" : ISODate("2019-09-16T10:27:20.197Z"),
    "target" : [
        {
            "score" : 3
        },
    {
            "score" : 2
        }
    ],
    "contact" : {
        "user" : "user",
        "time" : ISODate("2019-09-16T10:47:20.197Z")
    }
}

我需要选择score为3的所有数据集作为target的第一个元素,并返回admissioncontact.time之间的平均时间差。

所以结果应该类似于:342个得分为3的数据集的平均时差为25.34分钟

因此,第一部分要做起来很容易

db.data.find({ 'target.0': 2 })

但是如何从所有这些选定的数据集中得到平均时差?

mongodb
1个回答
0
投票

您可以使用Aggregation Pipeline执行此操作。根据您的数据格式,您需要target.0.score而不是target.0

db.data.aggregate([
{
    $match : {"target.0.score": 3} // Filter All targets
},
{
    $group : {
        "_id" : null,
        "Average" : {"$avg" : {$divide: [{$subtract: ["$contact.time", "$admission"]}, 60000]}} // Calculate Average from distance, also, Divide by 60000 to convert from milliseconds to seconds. 
    }
}
])
© www.soinside.com 2019 - 2024. All rights reserved.