sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan tæller man produktgruppe klogt med feltnavn i Monogodb?

Du kan udnytte brugen af ​​$arrayToObject operatør inden for en række pipelines og en sidste $replaceRoot pipeline for at få det ønskede resultat.

Bemærk :hubId konverteres til en streng under pipeline-operationen som $arrayToObject operator fungerer godt, hvis "nøgle"-værdien er en streng. Så hvis hubId er et ObjectId derefter $toString er nødvendig, når $arrayToObject anvendes.

Du skal køre følgende samlede pipeline:

Product.aggregate([
    {  "$group": {
            "_id": {
                "hubId": "$hubId",
                "status": "$ProductStatus"
            },
            "count": { "$sum": 1 }
    } },
    { "$group": {
        "_id": "$_id.hubId",
        "counts": {
            "$push": {
                "k": "$_id.status",
                "v": "$count"
            }
        }
    } },
    { "$group": {
        "_id": null,
        "counts": {
            "$push": {
                "k": { "$toString": "$_id" },
                "v": "$counts"
            }
        }
    } },
    { "$addFields": {
        "counts": {
            "$map": {
                "input": "$counts",
                "in": {
                    "$mergeObjects": [
                        "$$this",
                        { "v":  { "$arrayToObject": "$$this.v" } }
                    ]
                }
            }
        }
        
    } },
    {  "$replaceRoot": {
        "newRoot": { "$arrayToObject": "$counts" }
    } }  
])

hvilket giver følgende resultatdokument:

{
    "xyz" : {
        "Delivered" : 1,
        "On the Way" : 1
    },
    "mlm" : {
        "On the Way" : 1,
        "Delivered" : 2
    },
    "yyy" : {
        "On the Way" : 1,
        "Delivered" : 1,
        "Cancelled" : 1
    }
}

Dette giver naturligvis ikke den anden status, der har nul, men løsningen kan være et godt udgangspunkt.




  1. Hvordan angiver jeg kriterier for at ekskludere dokumenter fra en forespørgsel?

  2. Ønsker at bruge Redis som en begivenhedsstatistikbutik

  3. mongodb regex virker ikke

  4. Opdatering af array med push og skive