2012-05-01 39 views
22

Tôi muốn xóa tất cả tài liệu ở đây foo bằng x. Có vẻ như một hoạt động khá cơ bản, nhưng tôi không thể hình dung ra được.Làm cách nào để xóa nhiều tài liệu trong CouchDB?

Tôi biết cách xóa một tài liệu riêng lẻ, nhưng điều đó không đủ tốt - tôi có thể phải xóa một vài nghìn cùng một lúc.

Làm cách nào để xóa hàng loạt tài liệu trong CouchDB?

Trả lời

9

Tôi không biết đó có phải là cách phù hợp nhưng hiển thị chế độ xem cho doc._id s của tất cả tài liệu mà bạn muốn xóa và thực hiện cập nhật hàng loạt đối với tất cả tài liệu của bạn . Vì vậy, hai (lý tưởng) gọi đến đi văng.

http://comments.gmane.org/gmane.comp.db.couchdb.user/11222

Có cách tương tự để thực hiện.

Thực hiện cập nhật hàng loạt trên tất cả các tài liệu mà bạn muốn xóa và cập nhật doc._deleted=true làm theo tấm gương trong Bulk deletion of documents

+5

OK, do đó, dựa trên liên kết của bạn và một số bài viết khác mà tôi đã đọc trong thời gian chờ đợi, có vẻ như không thể xóa hàng loạt (hoặc cập nhật). Nó có vẻ khá gây sốc rằng một cái gì đó mà tự gọi là một "cơ sở dữ liệu" sẽ không có tính năng này, nhưng ít nhất bây giờ tôi biết cách ít hiệu quả nhất để có được những gì tôi muốn. Cảm ơn vì thông tin. –

+11

Đó là sự thật. Định nghĩa về "cơ sở dữ liệu" đang thay đổi. Mọi người thường gọi memcache là "cache" và bây giờ nó được coi là "cơ sở dữ liệu trong bộ nhớ". Tôi đồng ý rằng đó là sự bối rối. Nhưng mặt khác, định nghĩa cũ thực sự có nghĩa là "cơ sở dữ liệu SQL" cũng không đúng. – JasonSmith

+0

thực sự buồn không có cách nào thuận tiện hơn ...: '( –

2

tôi cũng cần một cái gì đó để xử lý đó và, vì chẳng có gì vào thời điểm đó, tôi quyết định làm cho tôi thực hiện riêng.

Bạn có thể tìm thấy nó here.

Cập nhật

Vì nó rất hữu ích cho tôi và để bảo vệ bản thân từ những sai lầm, tôi đã thêm một bản sao lưu/khôi phục tính năng để công cụ này mà bây giờ có thể được tìm thấy trên phiên bản 0.2

+0

Rất hữu ích, cảm ơn rất nhiều cho công cụ này – JoCuTo

0

Tôi đã thử một phương pháp hơi dài để xóa tài liệu. Lần đầu tiên tôi tạo một khung nhìn gọi là map_fun gọi là các tài liệu mà tôi muốn xóa. sau đó tôi lặp thông qua việc xem và lưu trữ các phím của allt ông ghi chép và sử dụng del db [ '_ id'] để xóa chúng

map_fun = '''function(doc){ 
    if (doc.doc_type == 'classic'){ 
    emit(doc._id, doc) 
    }}''' 

deldoclist = [] 
for row in db.query(map_fun): 
    deldoclist.append(row.key) 

for item in deldoclist: 
    del db[item] 
0

Đó là khá dễ dàng với số lượng lớn xóa: https://wiki.apache.org/couchdb/HTTP_Bulk_Document_API Chỉ cần POST để _all_docs một danh sách các JSONs trông giống như:

{"_id": "0", "_rev": "1-62657917", "_deleted": true} 
+0

Không, điều đó không trả lời câu hỏi.Tôi muốn tương đương với một cái gì đó như 'DELETE FROM t WHERE foo = 10'. vẫn phải thực hiện hai cuộc gọi, không phải một cuộc gọi. –

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