【发布时间】:2012-10-11 11:17:00
【问题描述】:
我在 MongoDB 中有一个如下所示的对象集合
{ "event_type": "event1", "created_at": some_date, ...more_fields... },
{ "event_type": "event2", "created_at": some_date, ...other_fields... },
{ "event_type": "event1", "created_at": some_date, ...more_fields... }
现在我想将上述数据与按某个字段分组的所有字段(可能并非所有对象中都存在)并按最高 created_at 日期排序。我尝试使用聚合框架和以下查询来做到这一点:
collection.aggregate([
{ "$group" => {
:_id => "$somefield",
:last_time => { "$max" => "$created_at" },
:events => { "$push" => { ... } }
}
},
{ "$match" => { "_id" => { "$ne" => nil } } },
{ "$sort" => { "last_time" => -1 } }
])
我面临的问题与线路有关
:events => { "$push" => { ... } }
如果我输入一些特定的字段,那么它会起作用,但我不知道该集合包含哪些确切的字段。但我希望整个对象像这样返回:
{
"event_type": "event1", "last_time": some_date, "events": [
{ "event_type": "event1", "created_at": some_date, ...more_fields... },
{ "event_type": "event1", "created_at": some_date, ...more_fields... },
...
]
}
【问题讨论】:
标签: mongodb aggregation-framework