2016-11-01 199 views
0

我有一定的要求,以降低分貝數調用mongo.and執行連接帶來的結果在一個查詢電話蒙戈Db的多個集合查找

我有結構這樣

{ 
    "_id": ObjectId("5818c26ca3329829945a14da"), 
    "brandId": "SHOP", 
    "type": "SHOP", 
    "BrandDetails": { 
     "channelList": ["Chn1", "Chn2", "Chn3", "Chn4", "Chn5"], 
     "status": "approved", 
     "categoryList ": ["RETAIL"] 
    } 
} 
"rewards": { 
    { 
     "rewardType": "SHOP", 
     "rewardId": "rwd1", 
     "brandId": "SHOP", 
     "RewardDetails": { 
      "channelNameForReward": [ 
       "chn1" 
      ] 
     }, 
     "status": "approved", 
    }, 
    { 
     "rewardType": "SHOP", 
     "rewardId": "rwd2", 
     "brandId": "SHOP", 
     "RewardDetails": { 
      "channelNameForReward": [ 
       "chn1" 
      ] 
     }, 
     "status": "approved", 
    } 
} 

查詢:

db.brand.aggregate(
    // Pipeline 
    [ 
     // Stage 1 
     { 
      $match: { 
       "type": "SHOP" 
      } 
     }, 

     // Stage 2 
     { 
      $match: { 
       "State": "Approved" 
      } 
     }, 

     // Stage 3 
     { 
      $match: { 
       "BrandDetails.channelList": "chn1" 
      } 
     }, 

     // Stage 4 
     { 
      $match: { 
       "BrandDetails.categoryList": "RETAIL" 
      } 
     }, 

     // Stage 5 
     { 
      $lookup: { 
       "from": "reward", 
       "localField": "brandId", 
       "foreignField": "brandId", 
       "as": "rewards" 
      } 
     }, 

     // Stage 6 
     { 
      $unwind: "$rewards" 

     }, 

     // Stage 7 
     { 
      $match: { 
       "rewards.rewardType": "SHOP" 
      } 
     }, 

     // Stage 9 
     { 
      $match: { 
       "rewards.processState": "Approved" 
      } 
     }, 

     // Stage 6 
     { 
      $unwind: "$rewards.channelNameForReward" 

     }, 

     // Stage 10 
     { 
      $match: { 
       "rewards.channelNameForReward": "Chn1" 
      } 
     } 
    ] 
); 

單品牌我可以有多個獎勵,執行$ lookup和$ unwind操作時我得到的結果,但不是例外格式

個 當我做這樣我得到的反應是這樣

品牌標識BrandDetails

...獎勵:reward1 品牌標識BrandDetails ...獎勵:reward2

我正在響應除外這樣

品牌id BrandDetails ...獎勵:red1,rewd2

回答

0

根據您提供的信息。你可以嘗試這樣的事情。您可能想要更新查詢以匹配您的字段,但想法是在最後對品牌ID進行分組,並推出獎勵。你可以合併所有的比賽,並且我們也不需要在最後放鬆獎勵。

db.brand.aggregate([{ 
    $match: { 
     "type": "SHOP", 
     "State": "Approved", 
     "BrandDetails.channelList": "Chn1", 
     "BrandDetails.categoryList": "RETAIL " 
    } 
},{ 
    $lookup: { 
     "from": "reward", 
     "localField": "brandId", 
     "foreignField": "brandId", 
     "as": "rewards" 
    } 
}, { 
    $match: { 
     "rewards.rewardType": "SHOP", 
     "rewards.processState": "Approved", 
     "rewards.RewardDetails.channelNameForReward": "chn1" 
    } 
}, { 
    $group: { 
     _id: { 
      brandId: "$brandId", 

     }, 
     myrewards: { 
      $push: "$rewards" 
     } 
    } 
}]); 
+0

感謝您的回覆,查找後我不打包執行搜索操作的結果。 –

+0

你如何執行搜索?請在帖子中添加更多詳細信息。 – Veeram