我刚写完“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