私はしばらく探していましたが、内部配列をソートして、現在作業しているドキュメントに保持することはできません。
{
"service": {
"apps": {
"updates": [
{
"n" : 1
"date": ISODate("2012-03-10T16:15:00Z")
},
{
"n" : 2
"date": ISODate("2012-01-10T16:15:00Z")
},
{
"n" : 5
"date": ISODate("2012-07-10T16:15:00Z")
}
]
}
}
}
そのため、サービスとして返されるアイテムを保持したいのですが、更新配列をソートしています。これまでのところ、シェルについて:
db.servers.aggregate(
{$unwind:'$service'},
{$project:{'service.apps':1}},
{$unwind:'$service.apps'},
{$project: {'service.apps.updates':1}},
{$sort:{'service.apps.updates.date':1}});
誰もが彼らがこれで助けることができると思いますか?
これを行うには、updates
配列を$unwind
ingし、結果のドキュメントをdate
で並べ替え、次に$group
でそれらを一緒に_id
に戻します。注文。
db.servers.aggregate(
{$unwind: '$service.apps.updates'},
{$sort: {'service.apps.updates.date': 1}},
{$group: {_id: '$_id', 'updates': {$Push: '$service.apps.updates'}}},
{$project: {'service.apps.updates': '$updates'}})