【发布时间】:2013-01-30 10:33:07
【问题描述】:
我很难理解 CouchDB 的 linked documents 功能。
我有两个 types 的数据存储在一个 CouchDB 数据库中:
{
"id":"1",
"type": "track",
"title": "Bohemian Rhapsody"
}
{
"id":"2",
"type": "artist",
"name": "Queen",
"tracks": ["1"]
}
我的印象是我可以编写如下视图并发出以下文档:
{
"id":"2",
"type": "artist",
"name": "Queen",
"tracks": [
{
"id":"1",
"type": "track",
"title": "Bohemian Rhapsody"
}
]
}
我一直在尝试这个视图,但它没有按我预期的方式工作:
function(doc) {
if(doc.type == 'artist') {
var tracks = [];
for(var i = 0; i < doc.tracks.length; i++) {
tracks.push({_id:doc.tracks[i]});
}
newdoc = eval(uneval(doc));
newdoc.tracks = tracks;
emit(doc._id,newdoc);
}
}
此处的示例:http://jphastings.iriscouch.com/_utils/database.html?music/_design/test/_view/linked
这并没有返回我希望的结果 - 你有什么建议吗?谢谢
【问题讨论】:
-
我认为不可能这样。在视图中,一次处理一个文档。因此,如果 id1 和 id2 是 2 个文档,则首先处理 id1,然后处理 id 2。跨度>
-
我添加了一个带有视图 (linked) 的设计文档 (dominicbarnes) 注意添加了
include_docs=true。视图本身被大量评论。 -
另外,我添加了
_count作为reduce 函数,将它与group_level=1一起使用会显示每个艺术家/收藏中列出了多少文档。
标签: couchdb