我的数据库中有多个具有这种结构的文档:
{
"_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
的第一个元素,并返回admission
和contact.time
之间的平均时间差。
所以结果应该类似于:342个得分为3的数据集的平均时差为25.34分钟
因此,第一部分要做起来很容易
db.data.find({ 'target.0': 2 })
但是如何从所有这些选定的数据集中得到平均时差?
您可以使用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.
}
}
])