有沒有可能用某種腳本更新mongodb中的數據? 我不想(不能)訪問mongo shell - 但想執行mongoshell更新查詢。 我的數據是一個csv文件。我使用hadoop來分析數據(提取和轉換)。我需要將數據返回到mongodb並更新一些屬性。作爲更新的參考,我想使用生成的ID用腳本MongoDB更新數據
可以完成此任務嗎?
任何幫助將是非常讚賞
有沒有可能用某種腳本更新mongodb中的數據? 我不想(不能)訪問mongo shell - 但想執行mongoshell更新查詢。 我的數據是一個csv文件。我使用hadoop來分析數據(提取和轉換)。我需要將數據返回到mongodb並更新一些屬性。作爲更新的參考,我想使用生成的ID用腳本MongoDB更新數據
可以完成此任務嗎?
任何幫助將是非常讚賞
你想從一個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 ...驅動程序來加載數據。
如果你可以連接到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)
嗨,它不只是一個導入。我想更新現有數據。我看着「腳本shell」。但它沒有太多的幫助 - 或者我錯過了什麼? – Backlit 2012-01-10 18:54:12
我不明白你爲什麼困惑,讓我更新答案。 – milan 2012-01-10 20:04:47
thx u milan - 它的作品完美 – Backlit 2012-01-11 10:07:00