gpt4 book ai didi

MongoDB 计算日期分组的计数

转载 作者:可可西里 更新时间:2023-11-01 10:25:38 27 4
gpt4 key购买 nike

我想计算每天的分配计数,通过在 assigned_on 上使用 day 分组我可以获得每天的分配计数,但那些是唯一计数每一天。

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

比如我有如下记录

{
"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
}
}
}
])

根据 day 在 assigned_on 上分组,我得到了第 1、2 和 3 天的以上结果,但我想将第 1、2 和 3 天的结果计数为 3,因为在第二个记录 released_on 日期是 12 月 4 日,这意味着床 2 在第 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 mapReduce 来做到这一点:

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 } ]

关于MongoDB 计算日期分组的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com