如何在couchDB视图中引用其他文档(加入类似功能)

时间:2011-01-07 11:50:29

标签: join view couchdb

我们有一个XML数据库的CouchDB表示,我们用它来驱动基于javascript的前端来操作XML文档。基本结构是一个简单的3级层次结构。即。

A - > B - > ç

答:父文件(A型) B:任何数量的父类型A的子文档 C:父类型B的任意数量的子文档

我们在CouchDB中使用type属性表示这3种文档类型:

e.g。

{
"_id":"llgc-id:433",
"_rev":"1-3760f3e01d7752a7508b047e0d094301",
"type":"A",
"label":"Top Level A document",
"logicalMap":{
    "issues":{
        "1":{
            "URL":"http://hdl.handle.net/10107/434-0",
            "FILE":"llgc-id:434"
        },
        "2":{
            "URL":"http://hdl.handle.net/10107/467-0",
            "FILE":"llgc-id:467" 
        etc...
        }
    }
}
}


{
"_id":"llgc-id:433",
"_rev":"1-3760f3e01d7752a7508b047e0d094301",
"type":"B",
"label":"a B document",
}

我想要做的是生成一个视图,该视图像A类型一样返回文档,但在logicalMap列表中包含B文档的label属性,例如。

{
"_id":"llgc-id:433",
"_rev":"1-3760f3e01d7752a7508b047e0d094301",
"type":"A",
"label":"Top Level A document",
"logicalMap":{
    "issues":{
        "1":{
            "URL":"http://hdl.handle.net/10107/434-0",
            "FILE":"llgc-id:434",
            "LABEL":"a B document"
        },
        "2":{
            "URL":"http://hdl.handle.net/10107/467-0",
            "FILE":"llgc-id:467",
            "LABEL":"another B document" 
        etc...
        }
    }
}
}

我正在努力探索执行此操作的最佳方式。看起来它应该相当简单!

1 个答案:

答案 0 :(得分:7)

查看http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Linked_documents

中的“关联文档”部分
function(doc) {
    //....
    if (doc.logicalMap.issues) {
        for (var i in doc.logicalMap.issues) {
            emit([doc._id,doc.logicalMap.issues[i]['FILE']], 
                                 {_id: doc.logicalMap.issues[i]['FILE']});
        }
    }
}

(未测试的)

然后使用include_docs=true

进行查询