Tôi đang tìm một tương đương CouchDB với "SQL join".Cách tốt nhất để thực hiện một "nhiều lần" JOIN trong CouchDB
Trong ví dụ của tôi có những tài liệu CouchDB đó là những yếu tố danh sách:
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
Có một tài liệu định nghĩa danh sách:
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
Như bạn có thể thấy các yếu tố thứ ba đã bị xóa, nó không còn là một phần của danh sách nữa. Vì vậy, nó không phải là một phần của kết quả. Bây giờ tôi muốn một khung nhìn trả về các phần tử nội dung bao gồm thứ tự đúng.
Kết quả có thể là:
{ "content" : ["second", "first"] }
Trong trường hợp này theo thứ tự của các yếu tố là đã như nó phải được. Một kết quả có thể:
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
tôi bắt đầu viết các chức năng bản đồ:
map = function (doc) {
if (doc.type === 'el') {
emit(doc.id, {"content" : doc.content}); //emit the id and the content
exit;
}
if (doc.type === 'list') {
for (var i=0, l=doc.elements.length; i<l; ++i){
emit(doc.elements[i], { "order" : i }); //emit the id and the order
}
}
}
Đây là như xa như tôi có thể nhận được. Bạn có thể sửa lỗi của tôi và viết một chức năng giảm? Hãy nhớ rằng tài liệu thứ ba không phải là một phần của kết quả.
Tất nhiên bạn cũng có thể viết chức năng bản đồ khác. Nhưng cấu trúc của các tài liệu (không thể thay đổi tài liệu phần tử xác định và tài liệu nhập cho mỗi mục nhập).
EDIT: Đừng bỏ lỡ nhận xét của JasonSmith về câu trả lời của anh ấy, nơi anh ấy mô tả cách làm điều này ngắn hơn.
Word, đây là một kỹ lưỡng. Công việc tốt jhs! –
Nó là sai lầm dài. Trên thực tế bướC# 2 là một giải pháp hoàn chỉnh, tuy nhiên có, tôi yêu cầu nền chi tiết và cách tùy chọn để thêm tiện lợi ở phía khách hàng. – JasonSmith
URL CouchIO đã thay đổi, đây là URL mới cho cùng một bài viết: http://couchio.tumblr.com/post/446015664/whats-new-in-apache-couchdb-011-part-two – Bdoserror