2009-04-26 34 views

Trả lời

2

Đối tượng JSON đó sẽ không được chấp nhận bởi CouchDB. Để lưu trữ tất cả dữ liệu với một yêu cầu máy chủ duy nhất, hãy sử dụng:

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

Hoặc, gửi yêu cầu CouchDB khác cho mỗi hàng.

Import file vào CouchDB từ dòng lệnh sử dụng cURL:

curl -vX POST https://user:[email protected]:1234/database \ 
    -d @- -# -o output -H "Content-Type: application/json" < file.json 
0

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

DB của bạn :: CouchDB :: Module Schema có một kịch bản để giúp đỡ với tải một loạt các văn bản vào Cơ sở dữ liệu CouchDB. Kịch bản couch_schema_tool.pl chấp nhận một tệp làm đối số và tải tất cả các tài liệu trong tệp đó vào cơ sở dữ liệu. Chỉ cần đặt từng tài liệu vào một mảng như vậy:

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

Nó sẽ tải chúng vào cơ sở dữ liệu cho bạn. Nhỏ caveat mặc dù tôi đã không thử nghiệm mã mới nhất của tôi chống lại CouchDB mới nhất vì vậy nếu bạn sử dụng nó và nó phá vỡ sau đó cho tôi biết. Tôi có thể phải thay đổi một cái gì đó để phù hợp với những thay đổi API mới.

Jeremy

5

Nếu bạn đang trên Linux, Bạn có thể viết một kịch bản shell nhanh Để đăng nội dung của file json hợp lệ để Couch.

Để kiểm tra chiếc ghế tôi đã làm một cái gì đó như thế này:

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

myFile.json có nội dung json tôi muốn nhập khẩu vào cơ sở dữ liệu.

Một lựa chọn khác, nếu bạn không thích dòng lệnh hoặc không sử dụng Linux, và muốn có một gui, bạn có thể sử dụng một công cụ như RESTClient

+0

Để mọi người tìm kiếm "POST": nó là một phần của gói libwww-perl. – ofrommel

3

Vâng, đây không phải là JSON hợp lệ ...

Để nhập JSON-Objects tôi sử dụng curl (http://curl.haxx.se):

curl -X PUT -d @my.json http://admin:[email protected]:5984/db_name/doc_id 

nơi my.json là một tập tin JSON-Object là trong. Tất nhiên bạn có thể đặt JSON-Object của bạn trực tiếp vào couchdb (không có một tập tin) cũng như:

curl -X PUT -d '{"name":"bob","hi":"hello"}' http://admin:[email protected]:5984/db_name/doc_id 

Nếu bạn không có một doc_id, bạn có thể hỏi couchdb cho nó:

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

Đối với bất kỳ ai khác gặp lỗi về Loại nội dung trong ví dụ đầu tiên tại đây, hãy thử: 'curl -X POST -d @ data.json http://127.0.0.1:5984/database/_bulk_docs -H 'Loại nội dung : application/json'' –

+0

Bị bỏ phiếu vì tôi nghĩ câu hỏi đang hỏi về nhiều tài liệu chứ không phải chỉ một tài liệu. Tôi tin rằng bạn đang trả lời cách nhập chỉ một tài liệu. –

6

Bắt đầu từ @Millhouse câu trả lời nhưng với nhiều tài liệu trong hồ sơ của tôi, tôi sử dụng

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

POST là một bí danh của lwp-request nhưng POST làm dường như không làm việc trên debian. Nếu bạn sử dụng lwp-request, bạn cần đặt phương thức với -m như trên.

Đường nhỏ _bulk_docs cho phép nhiều tài liệu được tải lên cùng một lúc.

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

+0

tệp bulk_doc api nên có tất cả tài liệu được lồng trong một đối tượng '{" docs ": [documents]}'. –

2

Đó không phải là giải pháp của tôi nhưng tôi thấy điều này để giải quyết vấn đề của tôi:

Một cách đơn giản xuất khẩu cơ sở dữ liệu CouchDB vào một tập tin, là bằng cách chạy lệnh Curl sau trong cửa sổ terminal:

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

bước tiếp theo là để sửa đổi các tệp json xuất khẩu để trông giống như một cái gì đó giống như dưới đây (chú ý _id):

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

Bit chính bạn cần xem xét là thêm tài liệu vào khối mã "tài liệu". Một khi điều này được thực hiện, bạn có thể chạy lệnh Curl sau để nhập dữ liệu vào một cơ sở dữ liệu CouchDB:

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

nhân đôi một cơ sở dữ liệu Nếu bạn muốn nhân bản một cơ sở dữ liệu từ một máy chủ khác. Chạy lệnh sau:

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

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

2

Có lẽ hơi muộn để trả lời. Nhưng nếu bạn có thể sử dụng Python hơn bạn có thể sử dụng couchdb module để làm như vậy:

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) 

Tôi tạo ra kịch bản python để làm điều đó (Như tôi đã không thể tìm thấy một trên Internet).

Kịch bản đầy đủ ở đây::

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

(tên -> jsonDb_to_Couch.py)

Nếu bạn tải về repo đầy đủ và:

  1. chữ thay thế tất cả các "_id" trong các tập tin json để "id"

  2. Run làm load_dbs

Nó sẽ tạo ra 4 cơ sở dữ liệu trong quá trình cài đặt ghế dài địa phương của bạn

Hy vọng rằng sẽ giúp người mới (như tôi)

+1

Tôi tin rằng mã của bạn được cho là có các thay đổi sau: 'couch = couchdb.server ()' thiếu url 'với mở ()' đóng dấu ngoặc đơn thay vì ngoặc đơn 'db_entry = json.loads (hàng)' tải thay vì tải –

+0

Cảm ơn Jared. Sửa lỗi trong bài gốc. – Tanmay