2012-01-10 4 views
6

Есть ли возможность обновлять данные в mongodb с помощью какого-то сценария? Я не хочу (не могу) получить доступ к оболочке mongo, но хотел бы выполнить запросы обновления mongoshell. Мои данные - это файл csv. Я использую hadoop для анализа данных (извлечения и преобразования). Мне нужно вернуть данные в mongodb и обновить некоторые атрибуты. В качестве ссылки для обновления я хотел бы использовать сгенерированный идентификаторДанные обновления MongoDB со сценарием

Можно ли выполнить эту задачу?

любая помощь будет очень признателен

ответ

10

Вы хотите читать данные из файла CSV и импортировать в MongoDB? Вы можете сгенерировать файл сценария (javascript) и использовать оболочку mongo для его выполнения, как описано в «scripting the shell».

Пример сеанса, тестовая база данных, начиная с пустой коллекции Foo:

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

тогда вы генерируете сценарий, скажем mongo_scripting.js:

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

и запустить скрипт:

mongo localhost:27017/test mongo_scripting.js 

возвращение в монго:

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

вы видите, что один документ обновлен и один новый вставлен.

Альтернативой является использование драйвера java/python ... для загрузки данных.

+0

Привет, это не просто импорт. Я хочу обновить существующие данные. Я посмотрел на «скриптинг оболочки». Но это не очень помогает - или я чего-то не хватает? – Backlit

+0

Я не понимаю, почему вы смущены, позвольте мне уточнить ответ. – milan

+0

thx u milan - его работы отлично – Backlit

2

если вы можете подключиться к MongoDB вообще, то вы можете с уверенностью использовать оболочку. Просто запустите оболочку на локальном компьютере и сказать ему, чтобы подключиться к удаленному экземпляру Монго, как:

Монго dbserver.mydomain.com/foo

Вы можете также рассмотреть возможность использования mongoimport, http://www.mongodb.org/display/DOCS/Import+Export+Tools, хотя mongoimport хотите создавать или заменять целые документы, а не обновлять поля в документах, как вы просили.

Мне кажется, что вам нужно написать сценарий для обработки каждой строки CSV и обновления документов в MongoDB. В Python этот скрипт будет выглядеть примерно так:

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) 
Смежные вопросы