Tôi vừa hoàn thành cuốn sách "couchdb: hướng dẫn dứt khoát" và bắt đầu chơi với các tài liệu thiết kế. tuy nhiên có một điều mà tôi không hiểu. Tất cả các ví dụ tôi đã thấy cho đến nay là hơi tuyến tính.Làm cách nào tôi có thể gọi một chế độ xem khác trong chế độ xem couchdb?
Ví dụ:
{
"_id": "1",
"_rev": ".....",
"name": "first",
"something": "blue",
"child": "2"
}
{
"_id": "2",
"_rev": ".....",
"name": "second",
"something": "green",
"child": "3"
"parent" : "1"
}
{
"_id": "3",
"_rev": ".....",
"name": "second",
"something": "red",
"parent" : "2";
}
Tôi không có vấn đề viết một cái nhìn, mà trả về tất cả các màu: (!)
function(doc) {
if (doc.something) {
emit(doc.something,doc._id);
}
}
Nhưng nếu tôi muốn biết tất cả con cháu (không trẻ em, xin lỗi lỗi của tôi) cho phần tử với _id = 1 ("something": "blue")? Kinh nghiệm lập trình của tôi nói với tôi, rằng tôi nên sử dụng đệ quy, nhưng tôi không biết làm thế nào. Làm thế nào tôi có thể gọi một chức năng xem, từ một chức năng xem?
Nói chung: vấn đề này phát sinh, khi bạn thiết kế cơ sở dữ liệu có tham chiếu giữa các tài liệu json. Cụ thể hơn với mối quan hệ chuyển tiếp giữa các phần tử.
Edit: Ví dụ: Tôi chỉ biết _id = 1 và kết quả nên được một cái gì đó như [_id = 2, _id = 3], bởi vì 2 là một đứa trẻ trong tổng số 1 và 3 là con của 2.
Tôi cần mô hình hóa mối quan hệ giữa các phần tử, như được mô tả. Tuy nhiên tôi có sự sang trọng để di chuyển logic trong một ứng dụng web java, đó là phần nào là một wrapper cho ứng dụng couchdb. Ý định của tôi là di chuyển càng nhiều logic càng tốt vào tài liệu thiết kế couchdb và tránh nhiều cuộc gọi. Tôi sẽ thử cả hai cách tiếp cận mà bạn đã đề cập: a) nhiều cuộc gọi đến ("lấy tài liệu gốc, nhận con, đưa con cái, v.v.") và b) lưu đường dẫn đầy đủ (ít mong muốn hơn) và xem nhanh hơn/tốt hơn. Cảm ơn bạn đã trả lời. –
Cảm ơn câu hỏi. Tôi đã học được những thứ mới trong khi trả lời nó. Nó sẽ là tuyệt vời nếu bạn đăng những phát hiện của bạn ở đây (hoặc bất cứ nơi nào trên web) khi bạn tìm ra những gì làm việc tốt nhất cho bạn. –