MongoDB使用脚本更新数据

时间:2012-01-10 16:21:24

标签: javascript mongodb database

是否有可能使用某种脚本更新mongodb中的数据? 我不想(不能)访问mongo shell - 但是想执行mongoshell更新查询。 我的数据是一个csv文件。我使用hadoop来分析数据(提取和转换)。我需要将数据恢复到mongodb并更新一些属性。作为更新的参考,我想使用生成的id

这项任务可以完成吗?

任何帮助都将非常感激

2 个答案:

答案 0 :(得分:12)

您想从CSV文件中读取数据并导入mongodb吗?您可以生成脚本文件(javascript)并使用mongo shell执行它,如“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

回到mongo:

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

您看到一个文档已更新,一个新文档已插入。

另一种方法是使用java / python ...驱动程序加载数据。

答案 1 :(得分:2)

如果你可以连接到MongoDB,那么你肯定可以使用shell。只需在本地计算机上运行shell并告诉它连接到远程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)