2011-07-24 5 views
2

Je travaille donc sur un projet pour animaux de compagnie où je stocke divers fichiers texte. J'ai installé mon application pour enregistrer les balises comme une chaîne dans l'une de mes collections de sorte qu'un exemple serait:Enregistrer/travailler avec des balises dans mongodb pour un système de gestion de documents

tags: « Linux Apache WSGI »

les stocker et à leur recherche fonctionnent très bien, mais ma question vient quand je veux faire quelque chose comme un nuage d'étiquettes, compter toutes les différentes étiquettes, ou faire un système de sélection dynamique basé sur des étiquettes, quelle est la meilleure façon de les casser pour travailler avec? Ou devrais-je les stocker d'une autre manière?

Logiquement, je pouvais parcourir tous les enregistrements et obtenir toutes les étiquettes, les casser en fonction de l'espace, puis mettre en cache le résultat d'une manière ou d'une autre. Peut-être que c'est la bonne réponse, mais je voulais demander à la communauté de la sagesse. J'utilise pymongo pour interagir avec ma base de données.

Répondre

6

Ou devrais-je les stocker d'une autre manière?

La façon standard de stocker des étiquettes est de les stocker en tant que matrice. Dans votre cas, la DB ressemblerait à quelque chose comme:

tags: ['linux', 'apached', 'wsgi'] 

... quelle est la meilleure façon de les briser travailler?

C'est pour quoi Map/Reduce est conçu. Cela "scanne" tous les records ". La sortie d'une Map/Reduce est une autre collection que vous pouvez interroger.

Cependant, il existe également une autre façon de le faire: conserver les "compteurs" et les mettre à jour. Ainsi, lorsque vous enregistrez un nouveau document, vous incrémentez également tous les tags associés à ce document.

Questions connexes