2017-07-12 4 views
0

私のドキュメントは以下のようになり、アグリゲーションを使用して変換します。 favourite_productsの中に私は製品配列を持っていて、それは各店舗に対応するproduct_idを持っています。今はすべてのショップの製品IDを欲しがっていますが、時間に基づいてソートされています。 :mongodbアグリゲーションを使用してネストした配列のドキュメントを変換する方法

"favourite_products": [ 
       { 
        "shop": { 
         "shop_id": "59465888f7babb000485574b", 
         "time": "2017-07-12T06:11:19.817Z" 
        }, 
        "product": [ 
         { 
          "product_id": "594c2d56f7afcf00043b1195", 
          "time": "2017-07-12T06:10:36.775Z" 
         }, 
         { 
          "product_id": "594ac36c76de720004e819f6", 
          "time": "2017-07-12T06:11:19.817Z" 
         } 
        ] 
       }, 
       { 
        "shop": { 
         "shop_id": "593acc24a2902d0004211f1f", 
         "time": "2017-07-12T06:12:59.372Z" 
        }, 
        "product": [ 
         { 
          "product_id": "594ac36c76de720004e819f6", 
          "time": "2017-07-12T06:12:59.372Z" 
         } 
        ] 
       } 
      ] 

私はこれにそれを変換したい:あなたは別の文書として結果をしたい場合

"favourite_products" 

["59465888f7babb000485574b",594c2d56f7afcf00043b1195","594ac36c76de720004e819f6","593acc24a2902d0004211f1f","594ac36c76de720004e819f6"] 
+0

ショップと商品IDが同じ出力配列になるのはなぜですか?また、出力例は実際には時間でソートされていないことに注意してください。 –

+0

これを達成するために何をしましたか?コードを表示して問題を尋ねます。これは質問をする良い方法ではありません。 –

+0

@NeilLunnはい出力IDを時刻ソートします。そして、私は最終的な文書がどのように見えるかを示したところで、Plsは時間を並べ替えるかのように考えます。そして、私は店舗と商品IDを同じ配列に入れていますbcs店舗IDはある店舗に対応し、商品IDはその店舗に関連する商品に対応しています。 –

答えて

2

以下は時間がfavourite_products.product.product_id

利用プロジェクトのドキュメントを命じ返します。 または結果を1つのドキュメントの配列として使用する場合は、グループを使用します。

db['testing-aggregate'].aggregate([ 
    {$unwind:'$favourite_products'}, 
    {$unwind:'$favourite_products.product'}, 
    {$sort:{'favourite_products.product.time':1}}, // order by time. 1=ascending | -1=descending 
    // {$project:{ 
    //  '_id':0, // exclude _id from output 
    //  'favourite_products':'$favourite_products.product.product_id' // return only product_id 
    // }}, 
    {$group:{ 
     _id:null, 
     product_id:{$push:'$favourite_products.product.product_id'} 
    }} 
]) 
+0

@ Pav.k実際にfavourite_productsは文書の一部なので、私はその文書を1つのuseridに対応させて見つけたり見つけたりする必要があります。そして、商品IDを抽出し、favourite_products配列内のすべての店舗から時間単位でソートします。最後に、製品IDを使用して、これらのIDに対応するすべての製品を取得します。 –

+1

は$ match {}を使用して必要なものを探します。 内部配列を検索している場合は、次のようにしてください: {$ match {'innerArray._id' = 'id'}}、 {$ unwind: 'innerArray'} {$ match {'innerArray._id' = 'id '}} –

+0

あなたの答えはまさに私が望んでいた、それは働いた。しかし、なぜ私たちが_id = nullを持っているのかを教えてください –

関連する問題