将json文件导入数据库-

将json文件导入数据库-,json,couchdb,Json,Couchdb,如果我有一个类似以下内容的json文件: {"name":"bob","hi":"hello"} {"name":"hello","hi":"bye"} cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json" 是否有将此导入couchdb的选项?couchdb将不接受JSON对象。要使用单个服务器请求存储所有数据,请使用: { "people": [ {

如果我有一个类似以下内容的json文件:

{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json"

是否有将此导入couchdb的选项?

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
curl-vX POSThttps://user:pass@127.0.0.1:1234/数据库\
-d@--o输出-H“内容类型:application/json”

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

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

它将为您将它们加载到数据库中。小警告,虽然我还没有测试我的最新代码与CouchDB的最新版本,所以如果你使用它,它会崩溃,然后让我知道。我可能需要改变一些东西来适应新的API变化


Jeremy

如果您在Linux上,您可以编写一个快速shell脚本,将有效json文件的内容发布到coach

为了测试沙发,我做了如下操作:

{"name":"bob","hi":"hello"}
{"name":"hello","hi":"bye"}
cat myFile.json | POST -sS "http://myDB.couchone.com/testDB" -c "application/json"
myFile.json包含我想要导入数据库的json内容


另一种选择是,如果您不喜欢命令行或不使用Linux,并且更喜欢gui,则可以使用类似于

的工具是的,这是无效的JSON

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

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

如果您没有文档id,可以向couchdb索取:

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

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

cat myFile.json | lwp-request -m POST -sS "http://localhost/dbname/_bulk_docs" -c "application/json" 
POST
lwp请求的别名,但是
POST
在debian上似乎不起作用。如果使用
lwp请求
,则需要如上所述,将方法设置为
-m

尾随的
\u bulk\u docs
允许一次上载多个文档


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

将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”代码块中添加文档。完成此操作后,可以运行以下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/"}'
原职:
回答可能有点晚了。但是,如果您可以使用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)
导入couchdb
导入json
coach=couchdb.Server()
db=沙发[]
使用open()作为jsonfile:
对于jsonfile中的行:
db_entry=json.load(行)
db.save(db_条目)
我创建了python脚本来实现这一点(因为我在Internet上找不到)

全文如下:

(名称-->jsonDb_to_coach.py)

如果您下载完整的回购协议,并且:

  • 文本将json文件中的所有“_id”替换为“id”

  • 运行make load_dbs

  • 它将在本地coach安装中创建4个数据库


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

    bulk_doc api应该将所有文档嵌套在
    {“docs”:[documents]}
    对象中。对于在第一个示例中遇到内容类型错误的其他人,试试这个:
    curl-xpost-d@data.jsonhttp://127.0.0.1:5984/database/_bulk_docs -H'Content-Type:application/json'
    被否决,因为我认为问题是询问多个文档,而不仅仅是一个文档。我相信您正在回答如何只导入一个文档。对于所有寻找“POST”的人:它是libwww perl包的一部分。我相信您的代码应该有以下更改:
    coach=couchdb.server()
    missing url
    with open()
    加载而不是加载。在原来的帖子中修复了它。
    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)