sql >> Database >  >> NoSQL >> MongoDB

Hoe productgroepsgewijs tellen met veldnaam in Monogodb?

U kunt gebruikmaken van $arrayToObject operator binnen een reeks pijplijnen en een laatste $replaceRoot pijplijn om het gewenste resultaat te krijgen.

Opmerking :hubId wordt tijdens de pijplijnbewerking geconverteerd naar een tekenreeks als $arrayToObject operator werkt goed als de waarde "sleutel" een tekenreeks is. Dus als hubId is een ObjectId dan $toString is nodig wanneer $arrayToObject wordt toegepast.

U zou de volgende geaggregeerde pijplijn moeten uitvoeren:

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" }
    } }  
])

wat het volgende resultaatdocument oplevert:

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

Dit levert natuurlijk niet de andere status op die nul telt, maar de oplossing kan een goed startpunt zijn.




  1. Hoe kan ik unieke ID's maken voor ingesloten documenten in MongoDB?

  2. Hoe server push in Flask-framework te implementeren?

  3. COD en CML gebruiken om applicaties te bouwen die voorraadgegevens voorspellen

  4. Unicode inkapselen van redis