sql >> Databáze >  >> NoSQL >> MongoDB

Jak počítat skupinu produktů podle názvu pole v Monogodb?

Můžete využít použití $arrayToObject operátor v řadě kanálů a poslední $replaceRoot potrubí k dosažení požadovaného výsledku.

Poznámka :hubId se během operace kanálu převede na řetězec jako $arrayToObject Operátor funguje dobře, pokud je hodnotou "klíč" řetězec. Pokud tedy hubId je ObjectId, pak $toString je potřeba, když $arrayToObject je použito.

Budete muset spustit následující agregační kanál:

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

což vede k následujícímu výslednému dokumentu:

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

To samozřejmě nevytváří další stav, který má nulový počet, ale řešení může být dobrým výchozím bodem.




  1. Sdílení soketů přes samostatné instance nodeJS

  2. Kódování HDFS Erasure v Big Data Hadoop

  3. Načtěte data z kolekce MongoDB do Swing JTable

  4. Náhodný vzorek z MongoDB vrací silně zkreslené výsledky