相关疑难解决方法(0)

按ObjectId日期聚合MongoDB结果

如何通过ObjectId日期汇总我的MongoDB结果.例:

默认光标结果:

cursor = [
    {'_id': ObjectId('5220b974a61ad0000746c0d0'),'content': 'Foo'},
    {'_id': ObjectId('521f541d4ce02a000752763a'),'content': 'Bar'},
    {'_id': ObjectId('521ef350d24a9b00077090a5'),'content': 'Baz'},
]
Run Code Online (Sandbox Code Playgroud)

预计结果:

projected_cursor = [
    {'2013-09-08':
        {'_id': ObjectId('5220b974a61ad0000746c0d0'),'content': 'Foo'},
        {'_id': ObjectId('521f541d4ce02a000752763a'),'content': 'Bar'}
    },
    {'2013-09-07':
        {'_id': ObjectId('521ef350d24a9b00077090a5'),'content': 'Baz'}
    }
]
Run Code Online (Sandbox Code Playgroud)

这就是我目前在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}
Run Code Online (Sandbox Code Playgroud)

是的,我知道最简单的方法是简单地为每条记录添加一个新的日期字段,然后再按此汇总,但这不是我现在想要做的.

谢谢!

mongodb pymongo aggregation-framework

5
推荐指数
2
解决办法
2394
查看次数

标签 统计

aggregation-framework ×1

mongodb ×1

pymongo ×1