2010-01-04 13 views
7

Qual è il modo migliore per tenere traccia dei tag univoci per una raccolta di documenti di milioni di elementi di grandi dimensioni? Il modo normale di fare tagging sembra essere l'indicizzazione dei tasti multipla. Spesso ho bisogno di ottenere tutte le chiavi uniche, però. Non ho nemmeno accesso al nuovo comando "distinto" di mongodb, dal momento che il mio autista, erlmongo, non sembra ancora implementarlo.MongoDB: Qual è un buon modo per ottenere un elenco di tutti i tag univoci?

risposta

10

Anche se il driver non implementa distinti, è possibile implementarlo da soli. In JavaScript (mi dispiace, non so Erlang, ma dovrebbe tradurre abbastanza direttamente) si può dire:

result = db.$cmd.findOne({"distinct" : "collection_name", "key" : "tags"}) 

Quindi, vale a dire: si fa un findOne sulle "$ cmd" collezione di qualunque database' usando. Passa il nome della raccolta e la chiave su cui desideri eseguire la distinzione.

Se è necessario un comando per il quale il proprio autista non fornisce un supporto, è possibile consultare http://www.mongodb.org/display/DOCS/List+of+Database+Commands per un elenco un po 'completo di comandi del database.

+0

Awwwwww, si. :) –

1

So che questa è una domanda vecchia, ma ho riscontrato lo stesso problema e non ho trovato una soluzione reale in PHP.

Così sono arrivato fino a questo:

http://snipplr.com/view/59334/list-of-keys-used-in-mongodb-collection/

+0

Benvenuto in Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackexchange.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. – oers

1

John, può risultare utile utilizzare Varietà, uno strumento open source per l'analisi dello schema di una collezione: https://github.com/jamescropcho/variety

Forse si potrebbe correre Varietà ogni N ore in background e interrogare il nuovo database varietàResults per recuperare un elenco di chiavi univoche che iniziano con una determinata stringa (cioè sono discendenti di un genitore specifico).

Fatemi sapere se avete domande o se avete bisogno di ulteriori consigli.

Buona fortuna!

Problemi correlati