Нахождение пересечения между двумя коллекциями в MongoDb - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть две очень большие (более 30000 документов) коллекции, одна содержит слова, извлеченные из текстового файла (имя коллекции «слово»), а другая содержит слова из словаря (имя коллекции «словарь»).

Как я могу получить слова, которые существуют в обеих коллекциях?

(Я упростил ситуацию, документы внутри коллекции 'word' содержат метаданные о словах, поэтому каждое слово должнобыть отдельным документом.)

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Скопируйте обе коллекции в одну коллекцию (при необходимости включите поле дискриминатора, чтобы вы могли указать, какой документ у вас есть в каждом экземпляре).

Запустить map-lower для этой коллекции

В Map выведите слово в качестве ключа и значение, скажем, {instance:1, dict:0} или {instance:0, dict:1} в зависимости от того, является ли отображаемый документ экземпляром или словарной статьей. (Вы можете добавить дополнительные поля в значения по мере необходимости.)

В «Уменьшить» накапливать баллы (как обычно).

Теперь выполните запрос для поиска instance > 0 и dict > 0, и у вас есть все слова, которые есть в обоих.

0 голосов
/ 14 сентября 2011

пусть

 db.word.findOne() >{ word:'a_word', ... }

 db.dict.findOne() >{ word:'a_word', def:'def_of_a_word', ... }

найти слова в слове col.

db.word.distinct('word')

проверить, существует ли a_word в слове dict.

db.dict.count({word:'a_word'})  // 0=not exist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...