【问题标题】:MongoDB update data with scriptMongoDB 使用脚本更新数据
【发布时间】:2012-01-10 16:21:23
【问题描述】:

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

这个任务可以完成吗?

任何帮助将不胜感激

【问题讨论】:

    标签: javascript mongodb database


    【解决方案1】:

    您想从 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... 驱动程序来加载数据。

    【讨论】:

    • 嗨,它不仅仅是一个导入。我想更新现有数据。我查看了“编写 shell 脚本”。但它没有多大帮助 - 还是我错过了什么?
    • JavaScript 文件中有什么内容?我错过了吗?搜索引擎优化,在这里!
    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2017-04-08
      • 2014-08-29
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多