2016-11-10 88 views
0

我的后文件如下所示:CouchDB的取得帖子作者

{ 
    _id: ..., 
    type: 'post', 
    title: ..., 
    description: ..., 
    author: 'user_id' 
} 

而另一个用户文档:

{ 
    _id: 'user_id', 
    type: 'user', 
    name: ..., 
} 

如何抓的帖子和链接的用户文档因为我只知道帖子ID

让用户文档在帖子文档中看起来不是一个好的解决方案,就好像用户改变他/她的名字或其他细节一样,我将不得不更新每篇文章。

另一种解决方案是在用户文档中包含posts数组,并在视图文档中使用两个发射。但由于帖子频繁和帖子数量多,这看起来有点低效。

回答

1

您提到“链接的文档”,就好像您在CouchDB中引用此功能一样,但它并不像您这样表示。原来,这是totally supported。您的文档结构不需要做任何改动,就可以使用地图功能是这样的:

function (doc) { 
    if (doc.type === 'post') { 
    emit(doc._id) 
    emit(doc._id, { _id: doc.author }) 
    } 
} 

所谓具有_id属性作为值发光的物体,它允许CouchDB的查找不同的文件(在这种情况下,用户文档)比当您在视图查询中添加include_docs=true时的原始文档更为重要。这使您可以在单个查询中获取完整的相关文档集合!我会参考前面链接到的文档以获得完整的示例。 (其他的文档也很棒!)

+0

感谢您的回复。但是,我试过这个。但我没有收到作者文件。它将两次返回给我。 – pewpewlasers

+0

其实现在它工作!奇怪的。我对非空值域做了同样的事情。可能是这个原因。谢谢回答我的问题。 couchdb的新功能。我已经通过文件,但有时对初学者来说有点压倒性。另外我认为在堆栈上的具体问题也不是一个坏主意。稍后找到更容易。感谢您抽出时间。 – pewpewlasers