2011-09-12 6 views
2

J'ai deux très grandes collections (plus de 30000 documents), l'une contient des mots extraits d'un fichier texte (nom de collection 'mot') et l'autre contient des mots d'un dictionnaire (nom de collection 'dictionnaire')). Comment obtenir les mots qui existent dans les deux collections?Trouver une intersection entre deux collections dans MongoDb

(j'ai simplifié la situation, les documents à l'intérieur de la collection 'mot' contiennent des métadonnées sur les mots, chaque mot doit être un document distinct.)

Répondre

4

Copier les collections en une seule collection (inclure un champ discriminante si nécessaire afin que vous puissiez dire quel genre de document que vous avez dans chaque cas).

Exécuter carte-réduire sur cette collection

En carte, émettent le mot comme la clé et une valeur, ou dire {instance:1, dict:0}{instance:0, dict:1} selon que le document en question sera une instance ou une entrée de dictionnaire. (Vous pouvez ajouter plus de champs ici dans les valeurs si nécessaire.)

Dans Réduire, accumulez les scores (comme d'habitude).

Maintenant, faites une recherche recherchant instance > 0 et dict > 0 et vous avez tous les mots qui sont dans les deux.

-1

nous

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

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

trouver les mots dans le mot col.

db.word.distinct('word') 

Vérifiez si un mot existe dans dict col.

db.dict.count({word:'a_word'}) // 0=not exist 
Questions connexes