mongoDB上整个集合的平均值

时间:2018-08-06 12:54:18

标签: javascript node.js mongodb mongoose

我需要获取整个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函数的帮助,否则我们将欢迎您提出其他建议。

提前谢谢,希望我能得到一些帮助!

2 个答案:

答案 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))