У меня есть коллекция (образец) ниже:

{
    "productResult": null,
    "suggestion": {
        "companyIndex6Months": null,
        "companyPageConfiguration": {}
    },
    "problemResult": null,
    "companyResult": "*",
    "complainResult": {
        "complains": {
            "prev": null,
            "next": null,
            "data": [{
                    "userState": "PR",
                    "userCity": "Curitiba",
                    "description": "TEST"
                }, {
                    "userState": "SP",
                    "userCity": "Guariba",
                    "description": "TEST 2"
                }
            ],
            "products": [{
                    "name": "Notebooks",
                    "id": "0000000000000370"
                }, {
                    "name": "Assistência técnica",
                    "id": "0000000000000470"
                }
            ],
            "problems": [{
                    "name": "Não liga",
                    "id": "0000000000000029"
                }, {
                    "name": "Lento",
                    "id": "0000000000000731",
                }
            ],
            "count": 30543
        },
        "suggestions": null,
        "maxScore": null
    }
},
{
    "productResult": null,
    "suggestion": {
        "companyIndex6Months": null,
        "companyPageConfiguration": {}
    },
    "problemResult": null,
    "companyResult": "*",
    "complainResult": {
        "complains": {
            "prev": null,
            "next": null,
            "data": [{
                    "userState": "RS",
                    "userCity": "Porto Alegre",
                    "description": "TEST"
                }, {
                    "userState": "SP",
                    "userCity": "Sao Paulo",
                    "description": "TEST 2"
                }
            ],
            "products": [{
                    "name": "Notebooks",
                    "id": "0000000000000370"
                }, {
                    "name": "Assistência técnica",
                    "id": "0000000000000470"
                }
            ],
            "problems": [{
                    "name": "Não liga 2",
                    "id": "0000000000000030"
                }, {
                    "name": "Lento 2",
                    "id": "0000000000000531",
                }
            ],
            "count": 30543
        },
        "suggestions": null,
        "maxScore": null
    }
}

Я пытаюсь вернуть общее количество вхождений каждого состояния (поле ПожаловатьсяResult.data.userState) для всех документов в этой коллекции.

Я новичок в Mongo, и я пытаюсь использовать предложение ниже:

db.reclame.aggregate( [
   { $group: { _id, { state: "$complainResult.complains.data.userState" } , "count": { $sum: 1 } } }
]);

Но он возвращается:

{ "_id" : { "state" : [ "MG", "PR", "SC", "SP", "MG", "RJ", "MG", "MG", "DF", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SC", "MT", "SP", "SP", "PA", "BA", "SP", "RS", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "ES", "SP", "SP", "SP", "RS", "SP", "PE", "DF", "MG", "RJ" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SP", "PR", "GO", "PR", "SP", "MG", "MG", "RJ", "BA" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SP", "PR", "SP", "MG", "SP", "SP", "SP", "SP", "RJ" ] }, "count" : 1 }
{ "_id" : { "state" : [ "PE", "SP", "RS", "SP", "RJ", "BA", "SP", "RS", "SP", "CE" ] }, "count" : 1 }
{ "_id" : { "state" : [ "BA", "PR", "PE", "RJ", "SP", "SP", "SP", "SP", "PR", "MG" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "RN", "SP", "SP", "GO", "CE", "MT", "SC", "DF", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "RJ", "ES", "BA", "SP", "BA", "RS", "SP", "RS", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "CE", "SP", "SP", "MT", "RJ", "SC", "ES", "SP", "SP", "DF" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "PB", "SP", "SP", "MG", "AL", "SP", "MG", "SP", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SP", "SP", "SP", "SP", "RJ", "RN", "CE", "RJ", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "PR", "DF", "SP", "SP", "SP", "DF", "MG", "RS", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SP", "RS", "SP", "PR", "SP", "GO", "SP", "BA", "MG" ] }, "count" : 1 }
{ "_id" : { "state" : [ "GO", "RS", "PA", "ES", "SP", "SP", "SP", "BA", "SP", "PE" ] }, "count" : 1 }
{ "_id" : { "state" : [ "RJ", "SP", "RJ", "GO", "SP", "RJ", "RJ", "SP", "RO", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "SP", "SC", "RS", "SP", "SP", "PR", "RJ", "RJ", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "BA", "SP", "SP", "CE", "SC", "PR", "SP", "SP", "MG" ] }, "count" : 1 }
{ "_id" : { "state" : [ "SP", "PE", "SP", "DF", "RS", "RS", "PR", "DF", "RS", "SP" ] }, "count" : 1 }
{ "_id" : { "state" : [ "DF", "SP", "SP", "MT", "SP", "SP", "SP", "PR", "DF", "ES" ] }, "count" : 1 }

Моя цель - вернуть что-то вроде этого:

{ "_id" : { "state" : [ "MG"] }, "count" : 12 }
{ "_id" : { "state" : [ "RS"] }, "count" : 43 }
{ "_id" : { "state" : [ "SP"] }, "count" : 60 }
0
someone_learning 1 Мар 2018 в 06:19

1 ответ

Лучший ответ

Вам нужно $unwind, а затем $group

db.reclame.aggregate( [
   {$unwind : "$complainResult.complains.data" },
   {$group: { _id : { state: "$complainResult.complains.data.userState" } , "count": { $sum: 1 } } }
]);
0
Saravana 1 Мар 2018 в 06:50