node.js - Mongoose 获取具有值的日期数组

标签 node.js mongodb mongoose

我想在我的 Mongoose 聚合中输入一个开始日期和一个结束日期,以获取该范围内每一天的注册用户。我知道我可以使用普通的计数函数,但我认为最好使用聚合函数,您怎么看?

var startDate = 2016-01-05;
var endDate = 2016-01-07;
history : [
    ['2016-01-05', 23], // Day 1 = 23 Users
    ['2016-01-06', 34], // Day 2 = 34 Users
    ['2016-01-07', 43]  // Day 3 = 43 Users
];

所以我正在寻找类似的东西

User.aggregate( [ { “$组”:{ “创建”:{ $gte: 开始日期, $lt: 结束日期 } } } ], 函数(错误,用户){ 历史推送(用户); } );

最佳答案

聚合确实是理想的解决方案,但它生成结果的方式与您的预期输出不同,具体取决于您的应用程序需求(我认为您很可能想使用此数据 显示在图表中)。

您可以通过多种方式解决这个问题。不是最好的解决方案,因为它取决于您的数据结构,即它假设 users 集合中的 created 日期字段遵循时间序列(每天创建一个用户) 并且是一个合适的 mongo 约会,但至少会让你前进。

让我们首先考虑聚合管道。由于您想要生成指定数据范围内每一天的用户计数列表,您可以构建 您的管道在 $match 之后 管道步骤,使用 $group 运算符使用 $dateToString 创建 created 日期字段的字符串表示形式作为组键 运算符,可用于按 "YYYY-MM-DD" 格式的日期进行分组。然后使用 $sum 获取每个累积文档的计数 运算符(operator):

var startDate = new Date("2016-01-05");
var endDate = new Date("2016-01-08");

var pipeline = [
    {
        "$match": {
            "created": {
                "$gte": startDate,
                "$lt": endDate
            }
        }
    },      
    {
        "$group": {
            "_id": {
                "yearMonthDay": { 
                    "$dateToString": { 
                        "format": "%Y-%m-%d", 
                        "date": "$created" 
                    } 
                }
            },
            "count": { "$sum": 1 }
        }
    }
];

然后您可以运行聚合管道,操作结果以获得所需格式的最终​​数组:

User.aggregate(pipeline, function (err, users){
    if (err) {/* handle error */ }
    console.log(JSON.stringify(users, null, 4));
    var data = users.map(function (u){  return [u._id.yearMonthDay, u.count]; });
    console.log(JSON.stringify(data, null, 4));
});

关于node.js - Mongoose 获取具有值的日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34668377/

相关文章:

node.js - PostgreSQL 错误 : relation does not exist on INSERT Statement

mongodb - 如何向 bson.D 对象添加值

mongodb - 如何将Mongo DB引擎mmapv1升级为有线触发器?

node.js - 在 Mongoose 中获得最大值

node.js - 无法使用 Node/Express/Mongodb 读取 null 的属性 'find'

mongodb - Mongoose 鉴别器行为

javascript - 在 toObject() 函数中使用 getter

mongodb - Mongoose 按字段分组和分组结果应存储为 groupname : object

node.js - Actor 错误: Cast to string failed for value

node.js - NodeJS、MongoDB - 从 GET 请求中的聚合返回 JSON 响应