2017-06-15 25 views
0

現在、MongoDBで子要素の最終日付を使用してコレクションをソートしようとしています。MongoDB - 子コレクションの最新日付で並べ替え

私は、.aggregate関数を使用する必要がありますが、それを並べ替えることはできないようです。

データの構造は、私は、コード

db.contacts.aggregate([ 
    { $group: { _id: "$_id", lastDate: { $last: "$messages.date" } } }, 
    { $sort: { lastDate: 1 } } 
]) 

しかし、予想2人の子供を持つ要素は常に2日付

を返すを使用する必要があるように見えます

{ 
    _id: int, 
    cellNumber: string 
    messages: [ 
    { 
     _id: int, 
     body: string, 
     date: Date/Time 
    } 
    ] 
} 

です:

{ _id: parentId, lastDate: dateOfLastMessage } 

実際:

{ _id: parentId, lastDate: [ dateOfMessage1, dateOfMessage2 ]} 

答えて

1

私はこれが(「最後」で、あなたが最新の日付を意味すると仮定して)あなたが望む結果を与えると思う:

db.contacts.aggregate([ 
    {$unwind: '$messages'}, 
    {$sort: {'messages.date': -1}}, 
    {$group: {_id: "$_id", messages: {$push: '$messages.date'}}}, 
    {$project: {messages: {$arrayElemAt: ['$messages', 0]}}}, 
    {$group: {_id: '$_id', lastDate: {$last: '$messages'}}} 
]) 

$arrayElemAtオペレータのみが導入されましたMongoバージョン3.2で。

関連する問題