Как посчитать частоту слов в наборе документов, используя node.js и mongoose - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть набор документов в MongoDB.

enter image description here

В NodeJS с mongoose я бы хотел посчитать количество вхождений каждого слова.Результат должен выглядеть примерно так:

[
    "latest": 2,
    "sprint": 2,
    "lair": 1,
    "laugh": 1,
    "fault": 1,
    "lemma": 2,
    "on": 1,
]

Есть идеи, как это сделать с помощью структуры агрегации MongoDB?

Я читал, что структура агрегации имеет лучшую производительность, поскольку агрегация выполняетсяизначально на сервере (C ++), тогда как mapReduce порождает отдельный поток (ы) javascript для запуска кода JavaScript.Но я начинаю с MongoDB, и я не нашел способа сделать это с ним.

1 Ответ

2 голосов
/ 27 сентября 2019

Прошло много времени с тех пор, как я использовал Mongo, но, надеюсь, это поможет:

db.TestDocuments.aggregate([

  // Unwind each element of the array into its own document
  { $unwind: "$words" },

  // Group and count the total of each occurrence for each word
  { $group: { 
    _id: "$words" , 
    count: { "$sum": 1 }
  }},

  // Remove the id field from the response, rename it to the word
  { $project: { "_id": 0, "word": "$_id", "count": 1 } },

  // Sort the results with highest occurrences first
  { $sort: { "count": -1 } }
]);

Результаты в этой структуре:

{ "count" : 2, "word" : "latest" }
{ "count" : 2, "word" : "sprint" }
{ "count" : 2, "word" : "lemma" }
{ "count" : 1, "word" : "lair" }
{ "count" : 1, "word" : "laugh" }
{ "count" : 1, "word" : "fault" }
{ "count" : 1, "word" : "on" }
...