2017-03-17 7 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"] 
      } 
     } 
    } 

} 
}]