2009-10-28 37 views

Trả lời

-5
import couchdb 
import simplejson as json 

resource = couchdb.client.Resource(None, 'http://localhost:5984/dbname/_all_docs') 
params = {"include_docs":True} 
content = json.dumps({"keys":[idstring1, idstring2, ...]}) 
headers = {"Content-Type":"application/json"} 
resource.post(headers=headers, content=content, **params) 
resource.post(headers=headers, content=content, **params)[1]['rows'] 
+3

-1: Câu trả lời này đã được đăng cùng lúc khi câu hỏi được hỏi và được chấp nhận qua một câu trả lời phù hợp hơn về API đã được đăng trước khi giải pháp này được đánh dấu là được chấp nhận. –

4

Đây là đúng cách:

import couchdb 

server = couchdb.Server("http://localhost:5984") 
db = server["dbname"] 
results = db.view("_all_docs", keys=["key1", "key2"]) 
+0

Điều này đúng chỉ khi bạn không kiểm soát tốt các kết quả. Phương pháp của tôi cho phép bạn yêu cầu các khóa từ _all_docs không tồn tại và bạn sẽ lấy lại một trình giữ chỗ trống cho các khóa không tồn tại. Nếu bạn cố gắng với phương pháp này, bạn sẽ nhận được một ngoại lệ khi lặp qua kết quả. Tại sao bạn muốn làm điều gì đó như thế này? Tham gia thủ công nhanh chóng. Bạn có tài liệu x và bạn muốn tham gia vào dữ liệu từ các tài liệu khác. – dnolen

+0

@dnolen: Trên thực tế, điều đó không đúng ... có lỗi trong mã '__repr__' cho kết quả hàng, điều đó đúng, nhưng bạn chỉ có thể thực hiện' [hàng cho hàng trong db.view ('_ all_docs', các phím = ["key1", "key2"]). hàng nếu 'giá trị' trong hàng] 'để có các hàng tồn tại. –

21

Cách dễ nhất là phải vượt qua một include_docs = True arg để Database.view. Mỗi hàng của kết quả sẽ bao gồm tài liệu. ví dụ.

>>> db = couchdb.Database('http://localhost:5984/test') 
>>> rows = db.view('_all_docs', keys=['docid1', 'docid2', 'missing'], include_docs=True) 
>>> docs = [row.doc for row in rows] 
>>> docs 
[<Document 'docid1'@'...' {}>, <Document 'docid2'@'...' {}>, None] 

Lưu ý rằng tài liệu của hàng sẽ là Không nếu tài liệu không tồn tại.

Tính năng này hoạt động với bất kỳ chế độ xem nào - chỉ cần cung cấp danh sách các phím phù hợp với chế độ xem.

+0

Tôi không nghĩ rằng điều này làm việc với chế độ xem giảm đáng tiếc. – dnolen

+2

Đúng, nhưng tài liệu không có ý nghĩa gì sau khi giảm bớt. Việc giảm kết hợp các mục từ nhiều tài liệu (cặp phát ra (khóa, giá trị) của bản đồ) thành một kết quả duy nhất. Do đó, một hàng giảm được tạo thành từ nhiều tài liệu và ý tưởng về tài liệu của một hàng giảm là vô nghĩa. Tất nhiên, bạn có thể bỏ qua mức giảm của một lượt xem bằng cách chuyển từ giảm = Từ khóa giả arg và có thể được kết hợp với include_docs = Đúng là tốt. Nhưng đó không phải là giảm nữa; chỉ một bản đồ. –

Các vấn đề liên quan