【问题标题】:group by 3 tables and count in empty functions the same as empty tables mongoDb按 3 个表分组并在空函数中计数与空表 mongoDb 相同
【发布时间】:2020-01-07 13:14:12
【问题描述】:

` 这是我的文档:我想按 storeId 和 3 个数组 diag.webForWeb、diag.webForStore 和 diag.storeForStore 进行分组,甚至对空数组进行计数: 类似的东西。

storeId; businessRulesWebForStore ; (vide); 100
$storeId; businessRulesWebForStore ; Cas 1; 1344
$storeId; businessRulesWebForStore ; Cas 2; 721
...
$storeId; businessRulesStoreForStore ; (vide); 100
$storeId; businessRulesStoreForStore ; Cas 1; 1344
...
$storeId; businessRulesWebForWeb; (vide); 100
$storeId; businessRulesWebForWeb; Cas 1; 1344

所以这就是我想要实现的目标,如果有人可以帮助我请 我做了一个这样的查询,但它不计算空值 `

{ 
        "_id" : "0176#82054861", 
        "storeId" : "176", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "39", 
                    "label" : "Cette référence LAD est livrable en point relais sur commande - en plus des quantités éventuellement disponible sur le PE - associé à un ENT (pas de controle de stock avant l'ATP dans ce cas)."
                }, 
                {
                    "_id" : "12", 
                    "label" : "Cette référence LAD n'est pas en stock sur le site d'éxpédition - pas de livraison avec délais court éligible."
                }, 
                {
                    "_id" : "37", 
                    "label" : "Cette référence LAD est livrable à domicile sur commande - en plus des quantités éventuellement disponible sur le PE - associé à un ENT (pas de controle de stock avant l'ATP dans ce cas)."
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "7", 
                    "label" : "Le stock magasin est <= 1 la référence n'est pas proposé en retrait 2 H"
                }
            ], 
            "storeForStore" : [

            ]
        }
    }
    { 
        "_id" : "0176#66228414", 
        "storeId" : "176", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "12", 
                    "label" : "Cette référence LAD n'est pas en stock sur le site d'éxpédition - pas de livraison avec délais court éligible."
                }, 
                {
                    "_id" : "37", 
                    "label" : "Cette référence LAD est livrable à domicile sur commande - en plus des quantités éventuellement disponible sur le PE - associé à un ENT (pas de controle de stock avant l'ATP dans ce cas)."
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "7", 
                    "label" : "Le stock magasin est <= 1 la référence n'est pas proposé en retrait 2 H"
                }
            ], 
            "storeForStore" : [

            ]
        }
    }
    { 
        "_id" : "0176#67494266", 
        "storeId" : "176", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "3", 
                    "label" : "Cette référence n'est pas commercialisée sur le magasin 380. ‘Mode de vente’ à non dans shopping manager. Contact : Chargé de Commercialisation du rayon auquel appartient la référence"
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "6", 
                    "label" : "L'article n'est pas vendu en ligne par le magasin exclusion PickUp dans MyStore"
                }
            ], 
            "storeForStore" : [
                {
                    "_id" : "6", 
                    "label" : "Plus de stock sur un produit non suivi rupture définitive"
                }
            ]
        }
    }
    { 
        "_id" : "0192#80036271", 
        "storeId" : "192", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "18", 
                    "label" : "Cette référence n'est pas éligible au sur commande - hors quantité disponible sur le PE. Option shopping manager 'Se limiter au stock dispo' cochée. Contact : chargé de Commercialisation'"
                }, 
                {
                    "_id" : "12", 
                    "label" : "Cette référence LAD n'est pas en stock sur le site d'éxpédition - pas de livraison avec délais court éligible."
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "18", 
                    "label" : "Les références en top 1 ne sont pas éligible au sur commande."
                }, 
                {
                    "_id" : "10", 
                    "label" : "Le stock magasin est >1 la référence est suivi Auto elle est éligible au Retrait 2H"
                }
            ], 
            "storeForStore" : [
                {
                    "_id" : "5", 
                    "label" : "Disponible en magasin"
                }
            ]
        }
    }
    { 
        "_id" : "0205#80036271", 
        "storeId" : "205", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "18", 
                    "label" : "Cette référence n'est pas éligible au sur commande - hors quantité disponible sur le PE. Option shopping manager 'Se limiter au stock dispo' cochée. Contact : chargé de Commercialisation'"
                }, 
                {
                    "_id" : "12", 
                    "label" : "Cette référence LAD n'est pas en stock sur le site d'éxpédition - pas de livraison avec délais court éligible."
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "7", 
                    "label" : "Le stock magasin est <= 1 la référence n'est pas proposé en retrait 2 H"
                }, 
                {
                    "_id" : "30", 
                    "label" : "La référence associée à un top Réppro à 2 n'est pas proposé à la vente car le retrait magasin sur commande est désactivé au niveau du magasin"
                }
            ], 
            "storeForStore" : [

            ]
        }
    }
    { 
        "_id" : "0205#73683743", 
        "storeId" : "205", 
        "diag" : {
            "webForWeb" : [
                {
                    "_id" : "8", 
                    "label" : "Cette référence LAD est en stock sur le site d'expédition - livraison à domicile éligible avec délais courts"
                }, 
                {
                    "_id" : "18", 
                    "label" : "Cette référence n'est pas éligible au sur commande - hors quantité disponible sur le PE. Option shopping manager 'Se limiter au stock dispo' cochée. Contact : chargé de Commercialisation'"
                }
            ], 
            "webForStore" : [
                {
                    "_id" : "7", 
                    "label" : "Le stock magasin est <= 1 la référence n'est pas proposé en retrait 2 H"
                }, 
                {
                    "_id" : "17", 
                    "label" : "Les références en top 0 ne sont pas éligible au sur commande."
                }
            ], 
            "storeForStore" : [
                {
                    "_id" : "6", 
                    "label" : "Plus de stock sur un produit non suivi rupture définitive"
                }
            ]
        }
    }

` 这是我的文档:我想按 storeId 分组,并且 3 个数组 diag.webForWeb、diag.webForStore 和 diag.storeForStore 并计数甚至是空数组:

所以这就是我想要实现的目标,如果有人可以帮助我请 我做了一个这样的查询,但它不计算空值 `

db.getCollection("deliveryInfosDto").aggregate([
    {
         $addFields:{
              "diag.webForWeb.name" : "webForWeb",
              "diag.webForStore.name" : "webForStore",
              "diag.storeForStore.name" : "storeForStore"
         }  
    },
    {
    $project: {
      _id: "$storeId",
      businessRules: { $concatArrays: ["$diag.webForWeb", "$diag.webForStore", "$diag.storeForStore"] }
    }
  },
  {
    $unwind: { path: "$businessRules", preserveNullAndEmptyArrays: true}
  },
  {
    $group: {
      _id:{StoreId:"$_id",bBusinessRule : "$businessRules.name", Cas: "$businessRules._id"},
      count: {$sum: 1}   
     }
  }

])

【问题讨论】:

  • 问题中缺少要查询的文档,如果您之前没有发布过,请做。

标签: mongodb group-by nosql nosql-aggregation


【解决方案1】:

如果我做对了。这将满足您的需求。

db.getCollection('deliveryInfosDto').aggregate([
    { "$project": {
        "storeId":"$storeId", 
        "rules" :[ { "rule":"WebForWeb", "count":{ $size: "$diag.webForWeb" }}
                            , { "rule":"WebForStore", "count":{ $size: "$diag.webForStore" }}
                            , { "rule":"StoreForStore", "count":{ $size: "$diag.storeForStore" }},]} 
   },
   { "$unwind": "$rules"},
   { "$group" : {
       "_id": {"businessRule": "$rules.rule", "storeId":"$storeId" },
       "Cas": { $sum: "$rules.count"  }}} 

])

结果:

    { 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "storeForStore", 
        "Cas" : "6"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "8"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "12"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "18"
    }, 
    "count" : 2.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "30"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "7"
    }, 
    "count" : 2.0
}
{ 
    "_id" : {
        "StoreId" : "192", 
        "bBusinessRule" : "storeForStore", 
        "Cas" : "5"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "192", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "10"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "7"
    }, 
    "count" : 2.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "39"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "37"
    }, 
    "count" : 2.0
}
{ 
    "_id" : {
        "StoreId" : "192", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "12"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "12"
    }, 
    "count" : 2.0
}
{ 
    "_id" : {
        "StoreId" : "205", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "17"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "3"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "6"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "176", 
        "bBusinessRule" : "storeForStore", 
        "Cas" : "6"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "192", 
        "bBusinessRule" : "webForStore", 
        "Cas" : "18"
    }, 
    "count" : 1.0
}
{ 
    "_id" : {
        "StoreId" : "192", 
        "bBusinessRule" : "webForWeb", 
        "Cas" : "18"
    }, 
    "count" : 1.0
}

【讨论】:

  • 感谢您的回答,但这不是我想要的,如果您看到我添加了我期望的内容,我只是编辑了帖子。提前致谢。结果中的 cas 是数组值的 id
  • 对不起,我不明白你想做什么。是否要计算子项?
  • storeId; WebForStore ; (视频); 100 $storeId; WebForStore ;编号 205; 2 $storeId; WebForStore ; 192;第721章StoreForStore ; (视频); 100 $storeId; StoreForStore ; 176;第1344章WebForWeb; (视频); 100 $storeId; WebForWeb;编号 1; 1344 这就是我所期望的一个例子
  • 什么是“(vide)”以及行尾的数字?
  • vide 表示空的,我什至想计算空数组
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多