MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да преброим продуктовата група с име на поле в Monogodb?

Можете да използвате използването на $arrayToObject оператор в рамките на поредица от конвейери и окончателен $replaceRoot тръбопровод, за да получите желания резултат.

Забележка :hubId се преобразува в низ по време на конвейерната операция като $arrayToObject Оператор работи добре, ако стойността на "ключ" е низ. Така че, ако hubId е ObjectId, след това $toString е необходимо, когато $arrayToObject се прилага.

Ще трябва да изпълните следния агрегатен канал:

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

което дава следния резултатен документ:

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

Това, разбира се, не създава друго състояние, което има нулев брой, но решението може да бъде добра отправна точка.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вмъкване на елемент във вложен масив в Mongodb

  2. Филтрирайте подмасива на масив по някои критерии

  3. Съхраняване и заявяване на JSON от база данни

  4. Дизайн на MongoDB документ за коментари (и техните коментари в отговор)

  5. MongoDB копира поле в друга колекция с външен ключ