CouchDb 获得 post 作者
CouchDb get post author
我的 post 文档如下所示:
{
_id: ...,
type: 'post',
title: ...,
description: ...,
author: 'user_id'
}
还有另一个用户文档:
{
_id: 'user_id',
type: 'user',
name: ...,
}
鉴于 我只知道 post id,我如何获取 post 和链接的用户文档?
在 post 文档中包含用户文档似乎不是一个好的解决方案,因为如果用户更改 his/her 名称或其他详细信息,我将不得不更新每个 post .
另一种解决方案是在用户文档中包含一个 posts 数组,并在视图文档中使用两个发射器。但是由于频繁 posts 和大量 posts,这看起来有点低效。
你提到 "linked documents" 就好像你在 CouchDB 中引用了这个功能,但它看起来不像你的意思。
原来,这是totally supported。您的文档结构根本不需要更改,您可以使用这样的地图功能:
function (doc) {
if (doc.type === 'post') {
emit(doc._id)
emit(doc._id, { _id: doc.author })
}
}
通过发出一个以 _id
属性 作为值的对象,它允许 CouchDB 在您添加 include_docs=true
在您的视图查询中。这允许您在单个查询中获取整个相关文档集合!我将参考我之前链接到的文档以获取完整示例。 (他们的其他文档也很棒!)
我的 post 文档如下所示:
{
_id: ...,
type: 'post',
title: ...,
description: ...,
author: 'user_id'
}
还有另一个用户文档:
{
_id: 'user_id',
type: 'user',
name: ...,
}
鉴于 我只知道 post id,我如何获取 post 和链接的用户文档?
在 post 文档中包含用户文档似乎不是一个好的解决方案,因为如果用户更改 his/her 名称或其他详细信息,我将不得不更新每个 post .
另一种解决方案是在用户文档中包含一个 posts 数组,并在视图文档中使用两个发射器。但是由于频繁 posts 和大量 posts,这看起来有点低效。
你提到 "linked documents" 就好像你在 CouchDB 中引用了这个功能,但它看起来不像你的意思。
原来,这是totally supported。您的文档结构根本不需要更改,您可以使用这样的地图功能:
function (doc) {
if (doc.type === 'post') {
emit(doc._id)
emit(doc._id, { _id: doc.author })
}
}
通过发出一个以 _id
属性 作为值的对象,它允许 CouchDB 在您添加 include_docs=true
在您的视图查询中。这允许您在单个查询中获取整个相关文档集合!我将参考我之前链接到的文档以获取完整示例。 (他们的其他文档也很棒!)