2012-01-10 30 views
6

有沒有可能用某種腳本更新mongodb中的數據? 我不想(不能)訪問mongo shell - 但想執行mongoshell更新查詢。 我的數據是一個csv文件。我使用hadoop來分析數據(提取和轉換)。我需要將數據返回到mongodb並更新一些屬性。作爲更新的參考,我想使用生成的ID用腳本MongoDB更新數據

可以完成此任務嗎?

任何幫助將是非常讚賞

回答

10

你想從一個CSV文件中讀取數據,並導入到MongoDB的?您可以生成腳本文件(javascript)並使用mongo shell來執行它,如「scripting the shell」中所述。

例會話,測試數據庫,從一個空富集合:

> 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 

回到mongo:

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

您會看到一個文檔被更新並且一個新插入。

另一種方法是使用java/python ...驅動程序來加載數據。

+0

嗨,它不只是一個導入。我想更新現有數據。我看着「腳本shell」。但它沒有太多的幫助 - 或者我錯過了什麼? – Backlit 2012-01-10 18:54:12

+0

我不明白你爲什麼困惑,讓我更新答案。 – milan 2012-01-10 20:04:47

+0

thx u milan - 它的作品完美 – Backlit 2012-01-11 10:07:00

2

如果你可以連接到MongoDB,那麼你一定可以使用shell。只要你的本地計算機上運行的外殼,並告訴它連接到遠程蒙戈實例,如:

蒙戈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)