【问题标题】:import json file to couch db-将 json 文件导入到沙发 db-
【发布时间】:2010-10-21 21:41:09
【问题描述】:

如果我有一个看起来像这样的 json 文件:

{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}

有没有将其导入 couchdb 的选项?

【问题讨论】:

    标签: json couchdb


    【解决方案1】:

    回答可能有点晚了。但是如果你可以使用 Python,那么你可以使用 couchdb 模块来做到这一点:

    import couchdb
    import json
    couch = couchdb.Server(<your server url>)
    db = couch[<your db name>]
    with open(<your file name>) as jsonfile:
        for row in jsonfile:
            db_entry = json.load(row)
            db.save(db_entry)
    

    我为此创建了 python 脚本(因为我在 Internet 上找不到)。

    完整的脚本在这里::

    http://bitbucket.org/tdatta/tools/src/

    (名称 --> jsonDb_to_Couch.py​​)

    如果您下载完整的 repo 并且:

    1. 文本将json文件中的“_id”全部替换为“id”

    2. 运行 make load_dbs

    它将在您的本地沙发安装中创建 4 个数据库

    希望对新手(比如我)有所帮助

    【讨论】:

    • 我相信你的代码应该有以下变化:couch = couchdb.server(&lt;your server url&gt;)缺少url with open(&lt;your file name&gt;)右括号而不是括号db_entry = json.loads(row)加载而不是加载
    • 谢谢贾里德。在原帖中修复了它。
    【解决方案2】:

    这不是我的解决方案,但我发现这可以解决我的问题:

    将 CouchDB 数据库导出到文件的一种简单方法是在终端窗口中运行以下 Curl 命令:

    curl -X GET http://127.0.0.1:5984/[mydatabase]/_all_docs\?include_docs\=true > /Users/[username]/Desktop/db.json
    

    下一步是将导出的 json 文件修改为如下所示(注意 _id):

    {
      "docs": [
          {"_id": "0", "integer": 0, "string": "0"},
          {"_id": "1", "integer": 1, "string": "1"},
          {"_id": "2", "integer": 2, "string": "2"}
      ]
    }
    

    您需要查看的主要内容是在“docs”代码块中添加文档。完成后,您可以运行以下 Curl 命令将数据导入 CouchDB 数据库:

    curl -d @db.json -H "Content-type: application/json" -X POST http://127.0.0.1:5984/[mydatabase]/_bulk_docs
    

    复制数据库 如果要将数据库从一台服务器复制到另一台服务器。运行以下命令:

    curl -H 'Content-Type: application/json' -X POST http://localhost:5984/_replicate -d ' {"source": "http://example.com:5984/dbname/", "target": "http://localhost@:5984/dbname/"}'
    

    原帖: http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php

    【讨论】:

      【解决方案3】:

      CouchDB 不会接受该 JSON 对象。要使用单个服务器请求存储所有数据,请使用:

      {
        "people": 
         [
            {
              "name":"bob",
              "hi":"hello"
            },
            { 
              "name":"hello",
              "hi":"bye"
            }
         ]
      }
      

      或者,为每一行提交不同的 CouchDB 请求。

      使用 cURL 从命令行将文件导入 CouchDB:

      curl -vX POST https://user:pass@127.0.0.1:1234/database \
        -d @- -# -o output -H "Content-Type: application/json" < file.json
      

      【讨论】:

        【解决方案4】:

        从@Millhouse 回答开始,但我使用的文件中有多个文档

        cat myFile.json | lwp-request -m POST -sS "http://localhost/dbname/_bulk_docs" -c "application/json" 
        

        POSTlwp-request 的别名,但POST 似乎不适用于debian。如果你使用lwp-request,你需要像上面那样设置-m的方法。

        结尾的_bulk_docs 允许一次上传多个文档。

        http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API

        【讨论】:

        • bulk_doc api 应该将所有文档嵌套在 {"docs": [documents]} 对象中。
        【解决方案5】:

        是的,这不是有效的 JSON ...

        要导入 JSON 对象,我使用 curl (http://curl.haxx.se):

        curl -X PUT -d @my.json http://admin:secret@127.0.0.1:5984/db_name/doc_id
        

        其中 my.json 是 JSON-Object 所在的文件。 当然,您也可以将 JSON-Object 直接放入 couchdb(无需文件):

        curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:secret@127.0.0.1:5984/db_name/doc_id
        

        如果您没有 doc_id,可以向 couchdb 索取:

        curl -X GET http://127.0.0.1:5984/_uuids?count=1
        

        【讨论】:

        • 如果其他人在第一个示例中遇到有关 Content-Type 的错误,请尝试以下操作:curl -X POST -d @data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Content-Type: application/json'
        • 投了反对票,因为我认为问题是询问多个文档而不仅仅是一个。我相信您正在回答如何只导入一个文档。
        【解决方案6】:

        如果您使用的是 Linux,您可以编写一个快速的 shell 脚本来将有效 json 文件的内容发布到 Couch。

        为了测试沙发,我做了这样的事情:

        cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json"
        

        myFile.json 有我想要导入数据库的 json 内容。

        另一种选择,如果您不喜欢命令行或不使用 Linux,并且更喜欢 gui,则可以使用 RESTClient 之类的工具

        【讨论】:

        • 致所有寻找“POST”的人:它是 libwww-perl 包的一部分。
        【解决方案7】:

        http://github.com/zaphar/db-couchdb-schema/tree/master

        我的 DB::CouchDB::Schema 模块有一个脚本可以帮助将一系列文档加载到 CouchDB 数据库中。 couch_schema_tool.pl 脚本接受一个文件作为参数并将该文件中的所有文档加载到数据库中。只需将每个文档放入一个数组中,如下所示:

        [ {“名字”:“鲍勃”,“嗨”:“你好”}, {“姓名”:“你好”,“嗨”:“再见”} ]

        它将为您将它们加载到数据库中。一个小小的警告,虽然我还没有针对 CouchDB 的最新代码测试我的最新代码,所以如果你使用它并且它坏了,请告诉我。我可能需要进行一些更改以适应新的 API 更改。

        杰里米

        【讨论】:

          猜你喜欢
          • 2015-02-06
          • 1970-01-01
          • 1970-01-01
          • 2018-07-05
          • 1970-01-01
          • 2013-04-02
          • 1970-01-01
          • 2021-02-26
          • 1970-01-01
          相关资源
          最近更新 更多