如何按 ObjectId 日期聚合我的 MongoDB 结果。例子:
默认游标结果:
cursor = [
{'_id': ObjectId('5220b974a61ad0000746c0d0'),'content': 'Foo'},
{'_id': ObjectId('521f541d4ce02a000752763a'),'content': 'Bar'},
{'_id': ObjectId('521ef350d24a9b00077090a5'),'content': 'Baz'},
]
预计结果:
projected_cursor = [
{'2013-09-08':
{'_id': ObjectId('5220b974a61ad0000746c0d0'),'content': 'Foo'},
{'_id': ObjectId('521f541d4ce02a000752763a'),'content': 'Bar'}
},
{'2013-09-07':
{'_id': ObjectId('521ef350d24a9b00077090a5'),'content': 'Baz'}
}
]
这是我目前在 PyMongo 中使用来实现这些结果的方法,但它很混乱,我想看看如何使用 MongoDB 的聚合框架(甚至 MapReduce)来做到这一点:
cursor = db.find({}, limit=10).sort("_id", pymongo.DESCENDING)
messages = [x for x in cursor]
this_date = lambda x: x['_id'].generation_time.date()
dates = set([this_date(message) for message in messages])
dates_dict = {date: [m for m in messages if this_date(m) == date] for date in dates}
是的,我知道最简单的方法是简单地为每条记录添加一个新的日期字段,然后按此聚合,但这不是我现在想要做的。
谢谢!