假设我有一个Couch实例,其中包含以下文档:
{"id":"1","parent":null},
{"id":"2","parent":"1"},
{"id":"3","parent":"1"},
{"id":"4","parent":"3"},
{"id":"5","parent":"null"},
{"id":"6","parent":"5"}
是否有办法使用MapReduce构建一个以这种格式返回我的文档的视图:
{
"id":"1",
"children": [
{"id":"2"},
{"id":"3","children":[
{"id":"4"}
]}
]
},
{
"id":"5",
"children": [ {"id":"6"} ]
}
我的直觉说“不”,因为我想你需要为层次结构的每个级别提供一个传递,并且项目可以无限期地嵌套。
答案 0 :(得分:0)
仅使用map
功能无法实现,是的。但是reduce
可以访问map
函数发出的整个文档列表:http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Reduce_Functions
要实现这一点,您需要一个强大的reduce函数,该函数也应该能够使用" rereduce"有效率的。
最后,创建一个视图可能会更容易,它会将每个文档的父级映射为关键字。例如:
function(doc) {
emit(doc.parent, doc._id);
}
此视图将允许使用键" null"来查询顶级文档。以及像#34; 1"," 3"或" 5"。 可以添加reduce函数来创建如下结果:
null => [1, 5]
1 => [2, 3]
3 => [4]
5 => [6]
您所提到的结构树以不同的格式包含在其中,可以在那里创建。