由3个表分组,并计入空函数,与空表mongoDb相同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由3个表分组,并计入空函数,与空表mongoDb相同相关的知识,希望对你有一定的参考价值。

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

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

{ 
        "_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}   
     }
  }

])
答案

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

db.getCollection('deliveryInfosDto').aggregate([   
    { "$group" : {
       "_id": "$storeId",
       "countOfOfWebForWeb": { $sum: { $size: "$diag.webForWeb" }  },
       "countOfWebForStore": { $sum: { $size: "$diag.webForStore" }  },
       "countOfStoreForStore": { $sum: { $size: "$diag.storeForStore" }  }
    }
  }
])

结果:

/* 1 */
{
    "_id" : "205",
    "countOfOfWebForWeb" : 4,
    "countOfWebForStore" : 4,
    "countOfStoreForStore" : 1
}

/* 2 */
{
    "_id" : "192",
    "countOfOfWebForWeb" : 2,
    "countOfWebForStore" : 2,
    "countOfStoreForStore" : 1
}

/* 3 */
{
    "_id" : "176",
    "countOfOfWebForWeb" : 6,
    "countOfWebForStore" : 3,
    "countOfStoreForStore" : 1
}

以上是关于由3个表分组,并计入空函数,与空表mongoDb相同的主要内容,如果未能解决你的问题,请参考以下文章

Swift中的Void类型与空元祖表达式

链表的创建以及链表节点的添加和删除

如何在 UITableView 中安全地使用未初始化的数组并显示一个空表

sql server:处理空表类型

自己动手写CPU_5_5.4 逻辑位移操作与空指令的说明

空对象设计模式与空对象检查