このような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 日付で並べ替えたいと考えています。次のクエリで Aggregation Framework を使用してこれを実行しようとしました。
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... },
...
]
}