我有一个集合db.activities
,其中每个项目都有一个dueDate
。我需要以下列格式提供数据,基本上是今天和本周到期的活动清单:
{
"today": [
{ _id: 1, name: "activity #1" ... },
{ _id: 2, name: "activity #2" ... }
],
"thisWeek": [
{ _id: 3, name: "activity #3" ... }
]
}
我设法通过简单地查询上周的活动作为平面列表,然后在客户端上使用javascript对它们进行分组来实现这一点,但我怀疑这是一个非常脏的解决方案,并希望在服务器上执行此操作。
答案 0 :(得分:1)
查找mongo aggregation pipeline
您的聚合按日期匹配,按日期分组,也可以按日期排序/订购阶段。
缺乏数据方案,它将沿着
的路线db.collection.aggregate([{ $match: {"duedate": { "$gte" : start_dt, "$lte" : end_dt} } ,
{ $group: {_id: "$duedate", recordid : "$_id" , name: "$name" },
{"$sort" : {"_id" : 1} } ] );
如果你想要'所有'记录删除$ match或使用{ $match: {} }
和find一样。
在我看来,你不能在一个命令中按天和周汇总。可以通过使用mongos $ dayOfWeek投射duedate来实现每周一次。
db.collection.aggregate([
{ $match: {"duedate": { "$gte" : start_dt, "$lte" : end_dt} } ,
{ $project : { dayOfWeek: { $dayOfWeek: "$duedate" } },
{ $group: {_id: "$dayOfWeek", recordid : "$_id" , name: "$name" },
{"$sort" : {"_id" : 1} } ] );
结帐http://docs.mongodb.org/manual/reference/operator/aggregation/dayOfWeek/