2016-09-02 4 views
0

マイMongoDBのバージョン3.2、マングースのバージョンは4.6.0ソート(マングース)が動作しません

これらは私のスキーマあるあります注文。

[{ 
    _id: 57c8a682cde8baf5c36eb1fc, 
    lastMessage: { 
     _id: 57c8baa29a293eace7f9be15, 
     timestamp: 2016-09-01T23:32:50.344Z 
    } 
    }, { 
    _id: 57c8a6d0cde8baf5c36eb1fe, 
    lastMessage: { 
     _id: 57c8fabb4362b3c25d828774, 
     timestamp: 2016-09-02T04:06:19.421Z 
    } 
    }] 

は何これを引き起こす可能性があります。私はtimestampため-1または1'desc'、または「asc'を使用していない問題は、それはいつも私に同じ結果が得られ、また、これらの3

ChatModel 
    .find({}, 'lastMessage') 
    .populate('lastMessage', 'timestamp', null, { sort: { timestamp: -1 }}) 
    .exec() 
    .then(chats => console.log(chats)) 

ChatModel 
    .find({}, 'lastMessage') 
    .populate({ 
    path: 'lastMessage', 
    select: 'timestamp', 
    options: { sort: { timestamp: -1 }} 
    }) 
    .exec() 
    .then(chats => console.log(chats)) 

ChatModel 
    .find({}, 'lastMessage') 
    .populate('lastMessage', 'timestamp') 
    .sort({ 'lastMessage.timestamp': -1 }) 
    .exec() 
    .then(chats => console.log(chats)) 

を試してみましたか?おかげ


UPDATE1:

それはマングースのバグのように思えます。

this issue on GitHubを追跡してください。


アップデート2: それはサポートされていないと述べました。でも、なぜか分かりません... populatesortを使っていますか?最初に動作していない、これはそれがdatetime型だかどうかを確認するために、例えば、テキストのでそれを確認した場合

Chat.find().populate({ 
    path: 'lastMessage' 
    , select: 'timestamp' 
    , options: { sort: { timestamp: -1 }} 
}).exec(function (err, chats) { 
    //do something 
}) 

+0

それはあなたのために働くことがありhttp://stackoverflow.com/questions/16352768/how-to-sort-a-populated-document-in-find-request – abdulbarik

+0

@abdulbarikありがとう、私はそれらに従ったが、まだ動作しません。 –

+0

あなたはどのバージョンのマングースを使用していますか? – abdulbarik

答えて

0

これを試してみてください。..

ChatModel 
    .find({}) 
    .populate('lastMessage', 'timestamp', { 
     options: { 
      sort: { 
       'lastMessage.timestamp': 'desc' 
      } 
     } 
    }) 
.exec() 
    .then(chats => console.log('chats', chats)) 
+0

ありがとうございますが、まだ動作しません –

+0

更新された回答、今すぐお試しいただけますか? – abdulbarik

+0

まだ同じ結果はありません.. –

0

ドキュメント(http://mongoosejs.com/docs/api.html#document_Document-populateが)のようなものを述べてソートの問題

更新: 私はあなたの質問を読んだとき、私は問題を気づいた、最後のメッセージに基づいてすべてのメッセージを並べ替えるタイムスタンプ。 1つのアイテムしか返さないので(最後のメッセージの配列はありません)、集団をソートする必要はありません。

ので、構文は次のようになります。

Chat.find().populate({ 
     path: 'lastMessage' 
     , select: 'timestamp'}) 
.sort('lastMessage.timestamp') 
.exec(function (err, chats) { 
     //do something 
    }) 
+0

ありがとう、私は試しましたが、まだ動作しません.. –

+0

'.populate( 'lastMessage'、 'timestamp')ソート({'lastMessage.timestamp':-1})'、まだ動作しません.. –

関連する問題