我剛寫完「couchdb:權威指南」一書,並開始玩設計文檔。但有一件事我不明白。我迄今看到的所有例子都是線性的。如何在couchdb視圖中調用另一個視圖?
例子:
{
"_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";
}
我沒有問題,寫一個視圖,該視圖返回所有顏色:(!)
function(doc) {
if (doc.something) {
emit(doc.something,doc._id);
}
}
但是,如果我想知道的所有後代什麼(不孩子,對不起我的錯誤)的元素與_id = 1(「東西」:「藍色」)?我的編程經驗告訴我,我應該使用遞歸,但我不知道如何。如何從視圖函數調用另一個視圖函數?
一般來說:當你在json文檔之間引用數據庫時,會出現這個問題。更具體地說,與元素之間的傳遞關係。
編輯: 對於例如:我只知道_id = 1,結果應該是這樣的[_id = 2,_id = 3],因爲2是1和3一個孩子的孩子2.
我需要模擬元素之間的關係,如上所述。不過,我有幸在java web應用程序中移動邏輯,這對於couchdb應用程序來說有點包裝。我的意圖是儘可能多地將邏輯移至couchdb設計文檔並避免多次調用。我會嘗試你提到的兩種方法:a)多次調用(「獲取父文檔,獲取子文檔,獲取子項等)」和b)保存完整路徑(這是不太理想的),看看哪個是更快/更好。謝謝你的答案。 – 2010-07-30 16:53:29
感謝您的提問。我在回答時學到了新東西。如果你在這裏(或者網絡上的任何地方)發佈你的發現,那麼當你發現什麼對你最有效時,這將是非常棒的。 – 2010-08-01 00:33:06