Memorizzazione / lavoro con i tag in MongoDB per un sistema di gestione dei documenti
Domanda
Così sto lavorando su un progetto di animali dove sto memorizzazione dei vari file di testo. Ho installato la mia app per salvare i tag come una stringa in una delle mie collezioni in modo un esempio potrebbe essere:
tag: "Linux Apache WSGI"
La conservazione e alla ricerca di loro funzionano bene ma la mia domanda arriva quando voglio fare qualcosa di simile a una tag cloud, contare tutti i vari tag, o fare un sistema di selezione dinamica basata sui tag, qual è il modo migliore per rompere li fino a lavorare? O dovrei essere la loro memorizzazione in qualche altro modo?
Logicamente ho potuto eseguire la scansione attraverso ogni record e ottenere tutti i tag, le rompono in base allo spazio, quindi memorizzare nella cache il risultato in qualche modo. Forse questa è la risposta giusta, ma ho voluto chiedere la saggezza della comunità.
sto usando pymongo di interagire con il mio database.
Soluzione
O dovrei essere la loro memorizzazione in qualche altro modo?
Il metodo standard per memorizzare i tag è quello di memorizzare loro come un array. Nel tuo caso, il DB sarebbe simile:
tags: ['linux', 'apached', 'wsgi']
... qual è il modo migliore per rompere loro fino a lavoro con?
Questo è ciò che Map / Reduce è progettato per. Questo in modo efficace "analizza ogni record". L'uscita di un Map / Reduce è un'altra collezione che è possibile interrogare.
Tuttavia, c'è anche un altro modo per fare questo e questo è per mantenere "sportelli" e li aggiorna. Così, quando salva un nuovo documento anche incrementa tutti i tag relativi a tale documento.