2017-07-12 38 views
0

我的文檔如下所示,我想使用聚合來轉換它。 Inside 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時間排序。上面我只是展示了我的最終文檔的樣子,請認爲它好像是時間排序。而且我已將商店和產品ID放在同一陣列中。bcs商店ID對應於一個商店,而產品ID對應於與該商店有關的產品,這些是最喜歡的商品。 –

回答

2

下面返回時間排序favourite_products.product.product_id

利用項目的文件,如果你想要的結果作爲不同的文檔。 或使用組,如果你想結果作爲一個文件中的數組。

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是文檔的一部分,所以我需要匹配或找到對應於一個用戶標識的文檔。然後從favourite_products陣列中的所有商店中提取產品ID並按時間分類。最後使用產品ID來獲取與這些ID相對應的所有產品。 –

+1

使用$ match {}找到你需要的一個。 如果內部陣列,使用上搜索: {$ {匹配 'innerArray._id'= 'ID'}},{ 放鬆$: 'innerArray'} {$ {匹配 'innerArray._id'='身份證'}} –

+0

你的答案正是我想要的,它的工作。但是你能否告訴我們爲什麼有_id = null –