我的帖子文档如下所示:
{
_id: ...,
type: 'post',
title: ...,
description: ...,
author: 'user_id'
}
另一个用户文档:
{
_id: 'user_id',
type: 'user',
name: ...,
}
如果我只知道帖子ID ,我如何获取帖子和链接的用户文档?
在帖子文档中包含用户文档似乎不是一个好的解决方案,就好像用户更改了他/她的名字或其他细节一样,我将不得不更新每个帖子。
另一种解决方案是在用户文档中包含posts数组,并在视图文档中使用两个emits。但由于频繁发帖和帖子数量很多,这看起来效率不高。
答案 0 :(得分:1)
你提到了#34;链接文件"好像你在CouchDB中引用了这个功能,但它看起来并不像你那样。
事实证明,这是totally supported。您的文档结构根本不需要更改,您可以使用这样的地图函数:
function (doc) {
if (doc.type === 'post') {
emit(doc._id)
emit(doc._id, { _id: doc.author })
}
}
通过发出一个_id
属性作为值的对象,它允许CouchDB在您添加include_docs=true
时查找与原始文档不同的文档(在本例中为用户文档)查看查询。这允许您在单个查询中获取整个相关文档集合!我引用了之前链接的文档作为完整的示例。 (他们的其他文档也很棒!)