MongoDB обновляет данные скриптом - PullRequest
7 голосов
/ 10 января 2012

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

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

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

Ответы [ 2 ]

12 голосов
/ 10 января 2012

Вы хотите прочитать данные из файла 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 ... для загрузки данных.

2 голосов
/ 11 января 2012

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

mongo 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...