2014-06-14 17 views
6

Quando si importano dati da file (csv nel mio caso) mongoimport sceglie automaticamente il tipo di dati per ogni campo.mongoimport scegliendo il tipo di campo

È possibile scegliere manualmente il tipo di dati per un campo specifico? Ho riscontrato situazioni, quando nel mio file ci sono numeri di telefono, che voglio e quali dovrei considerare come stringhe, ma mongoimport (abbastanza propriamente) tratta quei numeri di telefono come numeri (NumberLong).

risposta

5

È possibile importare questi dati utilizzando CSV e quindi eseguire l'istruzione di aggiornamento sui dati esistenti in mongo db per convertirli nel formato desiderato.

+1

grazie. ho provato: db.cdr.find ({}, {dst: 1}). forEach (funzione (x) {x.dst = '' + x.dst; db.cdr.save (x)}) e ha funzionato come previsto. Nuova opzione per le stringhe no. Lo ha trasformato in array. C'è un modo più efficiente per farlo? :) – Jarema

3

Vedere la sezione Type Fidelity nella documentazione:

mongoimport e mongoexport non conservano in modo affidabile tutti i tipi di dati BSON ricchi perché JSON può rappresentare solo un sottoinsieme dei tipi supportati da BSON. Di conseguenza, i dati esportati o importati con questi strumenti potrebbero perdere qualche misura di fedeltà. Vedi MongoDB Extended JSON for ulteriori informazioni.

Utilizzare mongodump e mongorestore per conservare i tipi.

+0

Immagino che sia impossibile per Mongorestore quando ho bisogno di importare i dati da Postgres, o qualsiasi altro sql db. – Jarema

+0

In tal caso, farei ciò che suggerisce @Avneesh, importare i dati ed eseguire un comando di aggiornamento. Probabilmente è il più facile. Puoi trovare esempi qui: http://stackoverflow.com/questions/4973095/mongodb-how-to-change-the-type-of-a-field –

6

Durante l'importazione CSV/TSV a MongoDB opzione --columnsHaveTypes può aiuta a definite le colonne ma il documento sembra molto chiaro. Ci ho provato diverse volte fino a quando non ci sono riuscito. È necessario aggiungere l'opzione --columnsHaveTypes e modificare ogni colonna dopo - campi e utilizzare "\" prima di "(" e ")". ad esempio, modificare:

mongoimport -hfoohost -d bardb -c fooc --type tsv --fields col1,col2,col3 --file path/to/file.txt 

in

mongoimport -h foohost -d bardb -c fooc --type tsv --fields col1.int32\(\),col2.double\(\),col3.string\(\) --columnsHaveTypes --file path/to/file.txt 
Problemi correlati