0

私はこのマングースクエリの結果を持っています:

[ { _id: 523ab1be60239c8120000001,
    posts: 
     [ { _id: 523ab1be60239c8120000002,
         creator: 523ab1be60239c8120000001,
         listingType: 'lease',
         title: 'My Second Listing - Made By Person 1',
         __v: 0 } ] },
  { _id: 523ab1e224bfaea520000001,
    posts: 
     [ { _id: 523ab1e224bfaea520000002,
         creator: 523ab1e224bfaea520000001,
         listingType: 'lease',
         title: 'My Second Listing - Made By Person 2',
         __v: 0 },
       { _id: 523ab865ae55497d27000001,
         creator: 523ab1e224bfaea520000001,
         listingType: 'free',
         title: 'My Third Listing - Made By Person 2',
         __v: 0 } ] } ]

すべてpostsを 1 つの配列またはオブジェクトに格納して、 _id(タイムスタンプ) で並べ替えて、ユーザーに簡単に表示できるようにしたいと考えています。

これを達成する方法についてのアイデアはありますか?各投稿でループを実行し、これを達成するために何らかの並べ替えアルゴリズムを実行することを考えていますが、「ループ」という言葉だけでは、すでに非効率に聞こえます。

4

1 に答える 1

1

ドキュメント自体を並べ替えたい場合は、MongoDB の sort() 関数を使用するとよいでしょう。ただし、ドキュメントの一部を抽出して 1 つのオブジェクトに結合し、並べ替えたいので、いくつかのオプションがあり、どれが最適かはわかりません。

クエリをそのままにしておくと、実際には、何らかのループを使用してアプリケーション側で並べ替えるしかありません。

おそらく、これを行う最もクリーンな方法は、集約フレームワークを使用することです。元のクエリが何であったかにもよりますが、おそらくそれを$match操作に変換して、最初にパイプラインで使用できます。$unwind次に、 「posts」配列$sortをタイムスタンプで取得し、$groupそれらを 1 つの配列にまとめる ことができるはずです。

于 2013-09-19T19:53:44.553 に答える