Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB计算日期分组计数_Mongodb_Date_Mongodb Query_Aggregation Framework - Fatal编程技术网

MongoDB计算日期分组计数

MongoDB计算日期分组计数,mongodb,date,mongodb-query,aggregation-framework,Mongodb,Date,Mongodb Query,Aggregation Framework,我想计算每天的分配计数,通过使用天分组在分配上我可以得到每天的分配计数,但这些是每天的唯一计数 在这一点上,我还希望包括昨天或几天前分配但尚未释放的那张床 例如,我有以下记录 { "assigned_on":ISODate("2015-12-01T00:00:00Z"), "released_on":ISODate("2015-12-01T14:01:23Z"), "bed_id":1 }, { "assigned_on":ISODate("2015-12-01

我想计算每天的分配计数,通过使用分组在分配上我可以得到每天的分配计数,但这些是每天的唯一计数

在这一点上,我还希望包括昨天或几天前分配但尚未释放的那张床

例如,我有以下记录

{
    "assigned_on":ISODate("2015-12-01T00:00:00Z"),
    "released_on":ISODate("2015-12-01T14:01:23Z"),
    "bed_id":1
},

{
    "assigned_on":ISODate("2015-12-01T00:00:00Z"),
    "released_on":ISODate("2015-12-04T14:01:23Z"),
    "bed_id":2
},

{
    "assigned_on":ISODate("2015-12-01T00:00:00Z"),
    "released_on":ISODate("2015-12-01T14:01:23Z"),
    "bed_id":3
},

{
    "assigned_on":ISODate("2015-12-02T00:00:00Z"),
    "released_on":ISODate("2015-12-02T14:01:23Z"),
    "bed_id":1
},


{
    "assigned_on":ISODate("2015-12-02T00:00:00Z"),
    "released_on":ISODate("2015-12-02T14:01:23Z"),
    "bed_id":3
},

{
    "assigned_on":ISODate("2015-12-03T00:00:00Z"),
    "released_on":ISODate("2015-12-03T14:01:23Z"),
    "bed_id":1
},


{
    "assigned_on":ISODate("2015-12-03T00:00:00Z"),
    "released_on":ISODate("2015-12-03T14:01:23Z"),
    "bed_id":3
}
当前查询

 db.test.aggregate([
      {
        "$match": {
          "assigned_on": {
            "$gte": ISODate("2015-12-01T00:00:00Z"),
            "$lt": ISODate("2015-12-03T23:59:59Z")
          }
        }
      },
      {
        "$group": {
          "_id": {
            "$dayOfMonth": "$assigned_on"
          },
          "Count": {
            "$sum": 1
          }
        }
      }
    ])
在第二个记录中,发布的日期是12月4日,这意味着第二张床在第1、2、3和4天被占用。

电流输出:

{ "_id" : 3, "Count" : 2 }
{ "_id" : 2, "Count" : 2 }
{ "_id" : 1, "Count" : 3 }
预期产出:

{ "_id" : 3, "Count" : 3 }
{ "_id" : 2, "Count" : 3 }
{ "_id" : 1, "Count" : 3 }
编辑:id是12月1日、12月2日和12月3日的日期,count是各天分配的床位数


帮助或指针将非常有用

您可以使用mongodb:


你的问题很难理解如果你观察我的样本数据,那么床位2的记录显示12月1日被分配,12月4日被发布,这意味着床位也在12月1日、2日、3日和4日被占用。目前我可以得到每天的计数,就像你们在结果中看到的一样,12月1日的计数是3,12月2日的计数是2,12月3日的计数是2。但我希望输出为12月1日计数3,12月2日计数3,12月3日计数3,因为床位2占用了4天,即1、2、3和4天。现在清楚了吗?你能公布一下你的预期结果吗?我真的不明白你想逃避什么我已经加上了
var map = function(){

    var startDate = new Date(this.assigned_on.getTime());
    //set time to midnight
    startDate.setHours(0,0,0,0);

    //foreach date in date range [assigned_on, released_on) emit date with value(count) 1 
    for (var date = startDate; date < this.released_on; date.setDate(date.getDate() + 1)) {
        if(this.bed_id) {
            emit(date, 1);
        }
    }
};

//calculate total count foreach emitted date(key) 
var reduce = function(key, values){
    return Array.sum(values)
};

db.collection.mapReduce(map, reduce, {out : {inline : 1}}, callback);
[ { _id: Tue Dec 01 2015 02:00:00 GMT+0200 (EET), value: 3 },
  { _id: Wed Dec 02 2015 02:00:00 GMT+0200 (EET), value: 3 },
  { _id: Thu Dec 03 2015 02:00:00 GMT+0200 (EET), value: 3 },
  { _id: Fri Dec 04 2015 02:00:00 GMT+0200 (EET), value: 1 } ]