MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak mądrze policzyć grupę produktów z nazwą pola w Monogodb?

Możesz wykorzystać $arrayToObject operator w serii potoków i końcowy $replaceRoot potoku, aby uzyskać pożądany wynik.

Uwaga :hubId jest konwertowany na ciąg podczas operacji potoku jako $arrayToObject operator działa dobrze, jeśli wartość „klucza” jest ciągiem. Więc jeśli hubId jest identyfikatorem obiektu, to $toString jest potrzebne, gdy $arrayToObject jest stosowany.

Musisz uruchomić następujący zbiorczy potok:

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 daje następujący dokument wynikowy:

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

To oczywiście nie daje innego statusu, który ma zerową liczbę, ale rozwiązanie może być dobrym punktem wyjścia.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy funkcja javascript po stronie serwera ma problemy z wydajnością w mongoDB?

  2. Agregacja MongoDB przy użyciu oficjalnego sterownika C#?

  3. Jak policzyć występowanie każdej wartości w tablicy?

  4. Rails mongoid regex w polu Integer

  5. MongoDB:wstaw przy aktualizacji zduplikowanego klucza