2017-03-13 22 views
0

から返さ次マングースは、私は次のスキーマを持っているクエリ

{ Items: 
    [ 
    { name: 'test1', 
     _id: 58c70800a03d09a31bb7fc17, 
     createdAt: Mon Mar 13 2017 20:58:40 GMT+0000 (GMT) }, 
    { name: 'test2', 
     _id: 58c70826a03d09a31bb7fc18, 
     createdAt: Mon Mar 13 2017 20:59:18 GMT+0000 (GMT) } 
    ] 
} 

私の質問は:私は電子ことができますどのように私のmongooseクエリをcreatedAtプロパティに基づいて降順で並べ替えItems配列内のオブジェクトを返すには?即ちがtest1の上に現れるようにする。

(いくつかの追加情報、平均的なアイテム配列の長さはユーザーあたり3〜10で、私はこの理由からNodejsをバックエンドとして使用しています。小さなサイズか、Nodejの単一スレッドの性質のためにあまりにも非効率的ですか?)、ありがとう。

答えて

0

あなたは、あなたの_idに一致するようにaggregationを使用Items配列をほどく、降順のソートやプロジェクトのみItemsフィールド実行することができます。このソリューションは、私がどのように行う、Items配列内のすべてのオブジェクトのためのユーザーIDを返します

User.aggregate([{ 
    "$match": { 
     "_id": new mongoose.mongo.ObjectId("58c7fa6987200dfc592d088c") 
    } 
}, { 
    "$unwind": "$Items" 
}, { 
    "$sort": { 
     "Items.createdAt": -1 
    } 
}, { 
    "$group": { 
     "Items": { 
      "$push": "$Items" 
     }, 
     "_id": 1 
    } 
}, { 
    "$project": { 
     "_id": 0, 
     "Items": 1 
    } 
}], function(err, res) { 
    console.log(res); 
}) 
+0

をクエリ結果からユーザーIDを除外しますか?また、このクエリは、クライアント側でノードを実行するよりも効率的ですか?ありがとう – linasmnew

+0

_idを除外するプロジェクト段階で '' _id ":0'を追加してください。集約はmongodbの機能であり、nodejsで行うよりもはるかに効率的です –

+0

ありがとう、また元の質問の出力と同じ方法でフォーマットすることが可能ですか?つまり、オブジェクトを含む配列だけです。すべてのオブジェクトに対して 'Items'キーを含むオブジェクトを含む配列を返します。ありがとう – linasmnew

関連する問題