Angularjs 当月每个日期的注册用户总数

Angularjs 当月每个日期的注册用户总数,angularjs,mongodb,mongoose,mongoid,Angularjs,Mongodb,Mongoose,Mongoid,这里,日期是注册日期,通过简单的分组,我得到了这样的结果 [ { date: '2019-09-01', count: 1 }, { date: '2019-09-02', count: 3 }, { date: '2019-09-04', count: 2 }, { date: '2019-09-05', count: 5 }, // ... ] 但我想要每个日期,如果在该日期

这里,日期是注册日期,通过简单的分组,我得到了这样的结果

    [ 
      { date: '2019-09-01', count: 1 },     
      { date: '2019-09-02', count: 3 },     
      { date: '2019-09-04', count: 2 },     
      { date: '2019-09-05', count: 5 },    
     // ... 
    ]
但我想要每个日期,如果在该日期用户未注册,则显示计数为0

    [ 
      { date: '2019-09-01', count: 1 }, 
      { date: '2019-09-02', count: 3 },     
      { date: '2019-09-03', count: 0 },     
      { date: '2019-09-04', count: 0 },     
    // ... 
    ]
如果用户在3和4个日期未注册,则显示0计数

monthalldate = [ '2019-09-1',  '2019-09-2',  '2019-09-3',  '2019-09-4',  '2019-09-5',  '2019-09-6',  '2019-09-7',  '2019-09-8',  '2019-09-9',
  '2019-09-10',  '2019-09-11',  '2019-09-12',  '2019-09-13',.......,
  '2019-09-30' ]


  User.aggregate([
                { "$group": {
                  "_id": { "$substr": ["$createdOn", 0, 10] },
                  "count": { "$sum": 1 },
                  "time": { "$avg": "$createdOn" },
                }},
                { "$sort": { "_id": 1 } },
                { "$project": { "date": "$_id", "createdOn": "$count" }},
                { "$group": { "_id": null, "data": { "$push": "$$ROOT" }}},
                { "$project": {
                  "data": {
                    "$map": {
                      "input": monthalldate,
                      "in": {
                        "k": "$$this",
                        "v": { "$cond": [{ "$in": ["$$this", "$data.date" ] }, 1, 0 ] }
                      }
                    }
                  }
                }},
                { "$unwind": "$data" },
                { "$group": { "_id": "$data.k", "count": { "$sum": "$data.v" }}}
              ]).exec(function (err, montlysub) { 
                // console.log(montlysub);

              });
    But I got the wrong result
我的用户集合

 { "_id" : ObjectId("5a0d3123f954955f15fe88e5"), "createdOn" : ISODate("2019-11-16T06:33:07.838Z"), "name":"test" },
 { "_id" : ObjectId("5a0d3123f954955f15fe88e6"), "createdOn" : ISODate("2019-11-17T06:33:07.838Z"), "name":"test2" } 

$project
转换输入文档。如果某个月没有用户记录,则没有要转换的输入文档,该月也不会有任何输出

解决方法:

  • 创建一个包含月份(仅)的集合,然后从该集合中检索所需的日期范围,并将用户文档加入到每个月

  • 在应用程序中添加缺失的零数据点,无论是作为迭代结果还是作为结果呈现之前的后处理步骤


  • 我不这么认为,这是误导性的标题和问题@caconde你能显示你正在进行查询的样本数据和你现有的查询吗?是的@SaikatChakrabortty我有一个编辑问题,我也想知道你正在进行查询的样本用户数据。也许你也可以把它放在这里:这样我们就容易回答了。我的用户集合{“_id”:ObjectId(“5a0d3123f954955f15fe88e5”),“createdOn”:ISODate(“2019-11-16T06:33:07.838Z”),“name:“test”},{“_id”:ObjectId(“5a0d3123f954955f15fe88e6”),“createdOn”:ISODate(“2019-11-17T06:33:07.838Z”),“name”:“test2”}