2012-07-19 17 views
11

sto sviluppando questo pezzo di software nel nodo e MongoDB in cui in sostanza desidera memorizzare versioni dei pacchetti con la seguente struttura:Come si gestiscono i punti nei nomi dei tasti MongoDB?

{ 
    "versions": 
    { 
     "1.2.3": { stuff } 
    } 
} 

(simile a come NPM fa le cose in divano)

Il problema è che quando ho aggiornato MongoDB ho scoperto che non consente i punti nei nomi delle chiavi (a causa della notazione dei punti esistente), causando il fallimento del mio codice. Dopo aver cercato questo, tutto quello che ho potuto trovare è che è necessario trasformare i punti in un altro carattere prima di archiviarli nel db, quindi trasformarli di nuovo quando si accede. Non c'è davvero un modo migliore per affrontare questo?

Se non c'è, come posso fare questa trasformazione senza copiare i dati su un'altra chiave e cancellare l'originale?

+0

Stai dicendo che già dispone di dati come quello in Mongo? Ciò non avrebbe dovuto essere possibile anche prima dell'aggiornamento. Che versione stavi usando? – Thilo

+0

@Thilo In realtà non ricordo, ma potrebbe essere stato il driver a essere bacato e permesso. – jli

+0

@ c0deNinja Mi permette di cercare il nome della versione senza iterare attraverso l'intera serie di potenzialmente molte versioni. – jli

risposta

2

restrizioni Dot sono attualmente conducente forzata, e non tutti i driver hanno impedito punti nei nomi di campo fin dall'inizio. Puoi scrivere codice di protocollo non elaborato per fare ogni genere di cose pazzesche in Mongo, incluso l'utilizzo di caratteri davvero strani nei nomi delle collezioni.

Sarà molto meglio se lo pulisci (probabilmente sostituisci punti con - o qualche altro carattere valido), ma sarà difficile farlo bene con qualsiasi tipo di filtro intelligente. Molto probabilmente dovrai ripetere l'intera raccolta, cancellare i valori nella tua app e quindi sovrascrivere l'intero campo "versioni" nel tuo documento. Sul posto sovrascrive questo dovrebbe essere ragionevolmente veloce poiché non ridimensioneranno il documento e probabilmente non cambierà alcun indice.

+0

Sì, questo è quello che ho capito .. un problema qui è che gli utenti di questa applicazione possono aggiungere qualsiasi stringa come versione, quindi non ho uno standard con cui lavorare. La velocità di esecuzione di queste operazioni su ogni singola lettura supererebbe i benefici in termini di prestazioni di mongo rispetto a qualcosa di simile a un divano? Potrei semplicemente cambiare database poiché il progetto è in fase di sviluppo molto precoce proprio adesso. – jli

+0

In realtà sembra che sarà relativamente veloce dopo i test, grazie. – jli

+0

Hai effettivamente bisogno di una query all'interno delle versioni del documento? È possibile memorizzare una stringa JSON in "versioni" e analizzarla manualmente a tempo di caricamento/visualizzazione. L'elaborazione delle stringhe sulle letture probabilmente non ti rallenterà molto, la velocità di lettura in Mongo è molto più veloce di Couch. – MrKurt

3

si può utilizzare una collezione di versioni con roba?

come:

{ 
    "versions": 
    [ 
       { 
        "version_num": "1.2.3", 
        "stuff": { stuff } 
       }, 
       { 
        "version_num": "1.2.4", 
        "stuff": { stuff } 
       } 
    ] 
} 
+0

Ben oltre questo essendo un oggetto non valido, I ' Sto cercando di evitare di dover iterare su un array qui. – jli

+0

Sì, non è valido, basta chiedersi se un array funzionerebbe. Okey – keaplogik

Problemi correlati