Подсчет слов вложенной подсхемы в поле сбора mongoDB - PullRequest
0 голосов
/ 07 марта 2019

Я работаю над анализом данных CV большой коллекции mongoDB.Я пытаюсь посчитать абсолютную частоту слов в названии вакансии (поле jobs.jobTitle в схеме ниже).

Документы структурированы следующим образом:

{
    firstName: String,
    lastName: String,
    jobs: [{jobTitle: 'software architect', company: String, ...}, {jobTitle: 'full stack software engineer', company: String, ...}, {jobTitle: 'javascript developer', company: String, ...}],
    ...
}

Я хотел бы перебрать всю коллекцию и получить такой результат:

[{word: 'manager', count: 3245},{word: 'engineer', count: 3102}, {word: 'software', count: 3021}, ..]

Я попробовалследующая агрегация:

db.cvs.aggregate([
    {
        $project: {
            words: { $split: ["$jobs.jobTitle", " "] }
        }
    },
    {
        $unwind: {
            path: "$words"
        }
    },
    {
        $group: {
            _id: "$words",
            count: { $sum: 1 }
        }
    }, 
    { $sort: { "count": -1 } }
]) 

Что приводит к следующему сообщению об ошибке:

$split requires an expression that evaluates to a string as a first argument, found: array

Могу ли я сначала объединить строковые значения jobs.jobTitle в строку, используя агрегацию?Или есть другой способ достичь ожидаемого результата?

1 Ответ

0 голосов
/ 07 марта 2019

Спасибо за быстрый комментарий @NeilLunn

Я хотел бы поделиться исправленным запросом со всеми:

db.cvs.aggregate([
    { "$unwind": "$jobs" },
    {
        $project: {
            words: { $split: ["$jobs.jobTitle", " "] }
        }
    },
    {
        $unwind: {
            path: "$words"
        }
    },
    {
        $group: {
            _id: "$words",
            count: { $sum: 1 }
        }
    }, 
    { $sort: { "count": -1 } }
]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...