【发布时间】:2015-04-16 03:35:04
【问题描述】:
我每周都会收到来自服务的数据,并将这些数据放入一个集合中。数据有数量、projectNo 和 dataDate 时间戳。使用聚合框架,我按 projectNo 和 dataDate 对数量和组求和:
db.collection.aggregate([
{$project: {projectNo: 1, bdgtAppd: 1, dataDate: 1}},
{$group: {_id: {
projectNo: "$projectNo",
dataDate: "$dataDate"
},
amount: {$sum: "$bdgtAppd"}}
},
{$project: {_id:0,
projectNo:"$_id.projectNo",
dataDate:"$_id.dataDate",
amount:"$amount"
}
},
{$sort: {projectNo:1,dataDate:1}}
])
产生这个:
[{
"amount" : 7887,
"projectNo" : "5544A",
"dataDate" : "2015-01-02T08:00:00.000Z"
}, {
"amount" : 137947,
"projectNo" : "5544A",
"dataDate" : "2015-01-16T08:00:00.000Z"
}, {
"amount" : 137947,
"projectNo" : "5544A",
"dataDate" : "2015-01-23T08:00:00.000Z"
}, {
"amount" : 137947,
"projectNo" : "5544A",
"dataDate" : "2015-01-30T08:00:00.000Z"
}, {
"amount" : 130060,
"projectNo" : "5544A",
"dataDate" : "2015-02-06T08:00:00.000Z"
}, {
"amount" : 130060,
"projectNo" : "5544A",
"dataDate" : "2015-02-13T08:00:00.000Z"
}, {
"amount" : 130060,
"projectNo" : "5544A",
"dataDate" : "2015-02-20T08:00:00.000Z"
}]
我现在需要做的是将返回的数据限制为该月的最后一个日期:
[{
"amount" : 137947,
"projectNo" : "5544A",
"dataDate" : "2015-01-30T08:00:00.000Z"
}, {
"amount" : 130060,
"projectNo" : "5544A",
"dataDate" : "2015-02-27T08:00:00.000Z"
}]
编辑:集合中的示例文档:
{
"_id" : ObjectId("5527e724fc53ec16bc5fe57a"),
"projectNo" : "5544G",
"cpfoNo" : "1448R",
"cpfoDate" : ISODate("2014-10-20T07:00:00Z"),
"description" : "INC 6 CO 176 - Booster Pump",
"pcoNo" : "1510",
"approvedAmount" : null,
"days" : null,
"remarks" : null,
"itemNo" : "0005",
"costCode" : "5030.09900.0000.0000",
"itemTitle" : "Painting - Hasson",
"bdgtEst" : 0.0,
"bdgtProp" : 745.0,
"bdgtAprv" : 745.0,
"bdgtAppd" : 745.0,
"dataDate" : ISODate("2014-12-12T08:00:00Z")
}
【问题讨论】:
-
你能把你的文件给我们看看吗?
-
@Michael 你有机会看看这个吗?
标签: mongodb aggregation-framework