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

} 
}]