Как посчитать и получить искажение элемента структуры в поле массива mongodb? - PullRequest
0 голосов
/ 04 сентября 2018

Здравствуйте, я работаю с коллекцией MongoDB, содержащей миллионы документов, каждый документ содержит:

       {
"_id" : NumberLong(566994152),
"data" : [ 
    {
        "key" : "der.0",
        "value" : "Ision"
    }, 
    {
        "key" : "d_ont",
        "value" : "Co_OT"
    }, 
    {
        "key" : "ol.tx",
        "value" : "3.35"
    }
    .
    .
    .
    . 

],
"conclusion" : [ 
    {
        "rname" : "O",
        "rulename" : "FTNT"
    }
]
     }

Моя цель состоит в том, чтобы отфильтровать эту коллекцию на основе имени ключа, например key="d_ont". Результатом является число различных значений этого ключа и распределение каждого значения. например, для ключа "d_ont" есть 3 значения: "value1" 50 раз "value2" 56 раз и "value3" один раз ...

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете использовать ниже агрегации:

db.col.aggregate([
    {
        $unwind: "$data"
    },
    {
        $match: { "data.key": "d_ont" }
    },
    {
        $group: {
            _id: "$data.value",
            total: { $sum: 1 }
        }
    }
])

$unwind преобразует каждый элемент data в отдельный документ. Затем вы можете использовать $match, чтобы применить условие фильтрации, и $group, чтобы получить количество на значение (распределение)

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...