2017-03-17 147 views
0

我想從我的購物車中檢索未被刪除的項目和軟件包。 我的車是這樣的:多個陣列上的Mongo DB聚集

{ 
"_id": "589474849d7b3f439797faf1", 
"bundles": [{ 
    "id": "57c98e25298cd0f908021c12", 
    "serial": "xxxx", 
    "status": "" 
}], 
"items": [{ 
    "id": "589de9a690d632ccbc10cd64", 
    "status": "deleted", 
    "quantity": 1, 
    "serial": "fffff" 
}] 
} 

我想什麼:

[ 
      {$match: condition}, 
      {$unwind: {"path": "$items", "preserveNullAndEmptyArrays": true}}, 
      {$unwind: {"path": "$bundles", "preserveNullAndEmptyArrays": true}}, 
      {$match: {"items.status": {$ne: "deleted"}}}, 
      {$match: {"bundles.status": {$ne: "deleted"}}}, 
      { 
       "$group": { 
        "_id": "$_id", 
        currency: {$first: "$currency"}, 
        tenant: {$first: "$tenant"}, 
        user: {$first: "$user"}, 
        "items": {"$addToSet": "$items"}, 
        "bundles": {"$addToSet": "$bundles"} 
       } 
      } 
     ]; 

它工作正常的所有情況下,當只有一個已刪除項目,以及多個包時除外。查詢所有

預期輸出返回無束:

{ 
"_id": "589474849d7b3f439797faf8", 

"items": [{ 
    "id": "589de9a690d632ccbc10cd64", 
    "quantity": 1, 
    "serial": "fff" 

}, { 
    "id": "589de9a690d632ccbc10c55", 
    "quantity": 1, 
    "serial": "xxx" 
}], 
"bundles": [{ 
    "id": "57c98e25298cd0f908021c12", 
    "serial": "pppp" 
}] 
} 
+0

賈米勒喜;我可以提出建議嗎?您能否編輯您的問題以準確顯示預期結果,即您試圖從查詢中獲得的數據結構? –

+0

謝謝我發現了一個解決方案 現在我該如何解決一個問題? – jamil

+0

如果您自己發佈解決方案作爲答案,那麼您將能夠接受它(可能會延遲),並且您的問題將不再位於未答覆的列表中。 –

回答

0

哦,謝謝你們我找到了解決辦法,過濾器會做的伎倆

[{ 
$match: "condition" 
}, { 
$project: { 
    items: { 
     $filter: { 
      input: "$items", 
      as: "item", 
      cond: { 
       $ne: ["$$item.status", "deleted"] 
      } 
     } 
    }, 
    bundles: { 
     $filter: { 
      input: "$bundles", 
      as: "bundle", 
      cond: { 
       $ne: ["$$bundle.status", "deleted"] 
      } 
     } 
    } 

} 
}]