我需要获取整个mongo集合的平均值。更具体地说,我有两个日期字段,我们将其称为开始和结束。
首先,我需要执行诸如end-开始时间之类的操作,以获取经过时间。之后,我想对所有经过的时间求和并获得平均时间。
我需要这些数据来绘制图表。我已经看到mongoDB具有一些内置函数,例如减,求和和平均值。我不知道如何使用它们,而且我还需要几分钟的数据,因此我可能会使用一些Javascript对其进行转换,我现在还不知道,但这不是问题。
猫鼬模式:
msg = MIMEText('\nHi, this is new article: {}. \nYou can read this in {}'.format(article_title, article_url))
begin是名为inicio的变量,而end是名为fim的变量。
目前我需要这些mongo函数的帮助,否则我们将欢迎您提出其他建议。
提前谢谢,希望我能得到一些帮助!
答案 0 :(得分:1)
您需要将aggregate
函数与$subtract
函数一起使用。将两个日期相减,以毫秒为单位返回差异
db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ new Date(), "$date" ] } } } ] )
这将为您提供类似的数据
{ "_id" : 1, "item" : "abc", "dateDifference" : NumberLong("11713985194") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : NumberLong("11710385194") }
您可以将新日期更改为数据库中的另一个日期字段。
然后,您需要在聚合函数中使用$ substract和$ group来获得所需的结果,因为您尚未发布确切的架构,因此很难编写查询,因此可以尝试以下操作
https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/ https://docs.mongodb.com/manual/reference/operator/aggregation/subtract/ https://docs.mongodb.com/manual/reference/operator/aggregation/group/
答案 1 :(得分:1)
听起来像您需要运行一个聚合管道,该管道使用 $group
管道聚合整个集合。
在 $group
中,您需要使用 $subtract
运算符计算时间戳差异,然后将结果除以毫秒数。分钟(60 * 1000),使用 $divide
运算符。
然后,将 $avg
运算符应用于上述表达式,以便获得平均收款额。
对于 $group
管道,您可以指定一个_id
的null值,以计算所有输入文档整体的累积值。
以下示例显示了以上内容:
Atendimento.aggregate([
{ '$group': {
'_id': null,
'average_duration': {
'$avg': {
'$divide': [
{ '$subtract': ['$fim', '$inicio'] },
60*1000
]
}
}
} }
]).exec((err, results) => console.log(results))