2012-01-10 22 views
6

Esiste la possibilità di aggiornare i dati in mongodb con una sorta di script? Non voglio (non posso) accedere alla shell mongo - ma vorrei eseguire le query di aggiornamento di mongoshell. I miei dati sono un file CSV. Io uso hadoop per l'analisi dei dati (estrazione e trasformazione). Ho bisogno di recuperare i dati in mongodb e aggiornare alcuni attributi. Come riferimento per l'aggiornamento vorrei utilizzare l'id generatoMongoDB aggiorna i dati con lo script

Questo compito può essere svolto?

qualsiasi aiuto sarebbe molto apprezzato

risposta

10

Si desidera leggere i dati da un file CSV e importare in MongoDB? È possibile generare un file di script (javascript) e utilizzare la shell mongo per eseguirlo come descritto in "scripting the shell".

sessione Esempio, database di test, a partire da una collezione foo vuoto:

> db.foo.insert({name : "james", position : "forward"}) 
> db.foo.find() 
{ "_id" : ObjectId("4f0c99f6cb435f1e7d7fedea"), "name" : "james",  "position" : "forward" } 
> 

allora si genera lo script diciamo mongo_scripting.js:

db.foo.insert({name : "wade", position : "guard"}); 
db.foo.update({name : "james"}, {$set : {position : "power forward"}}, false, true); 

e in esecuzione lo script:

mongo localhost:27017/test mongo_scripting.js 

tornare a mongo:

> db.foo.find() 
{ "_id" : ObjectId("4f0c99f6cb435f1e7d7fedea"), "name" : "james", "position" : "power forward" } 
{ "_id" : ObjectId("4f0c9a64a4a4642bae6459ea"), "name" : "wade",  "position" : "guard" } 
> 

si vede che un documento è stato aggiornato e uno nuovo inserito.

Un'alternativa è utilizzare il driver java/python ... per caricare i dati.

+0

Ciao, non è solo un'importazione. Voglio aggiornare i dati esistenti. Ho guardato "scripting the shell". Ma non è di grande aiuto - o mi sfugge qualcosa? – Backlit

+0

non vedo perché sei confuso, lascia che aggiorni la risposta. – milan

+0

thx u milan - funziona perfettamente – Backlit

2

se riesci a connetterti a MongoDB, puoi sicuramente usare la shell. Basta eseguire la shell sul computer locale e dirgli di connettersi all'istanza Mongo remota, come:

mongo dbserver.mydomain.com/foo

Si può anche considerare l'utilizzo di mongoimport, http://www.mongodb.org/display/DOCS/Import+Export+Tools, anche se mongoimport vorranno per creare o sostituire interi documenti, non aggiornare i campi all'interno dei documenti come richiesto.

Mi sembra che sia necessario scrivere uno script per elaborare ogni riga del CSV e aggiornare i documenti in MongoDB. In Python, quello script sarebbe qualcosa di simile:

import csv, pymongo, sys 
foo_db = pymongo.Connection("dbserver.mydomain.com").foo 
csv_reader = csv.reader(open(sys.argv[1], 'rb'), delimiter=',', quotechar='"') 
for line in csv_reader: 
    _id, field1, field2 = line 
    foo_db.my_collection.update({ 
     "_id": _id 
    }, { 
     "$set": { "field1": field1, "field2": field2 } 
    }, safe=True) 
Problemi correlati