我有两个看起来有点像这样的文档:
Doc
{
_id: AAA,
creator_id: ...,
data: ...
}
DataKey
{
_id: ...,
credits_left: 500,
times_used: 0,
data_id: AAA
}
我想要做的是创建一个视图,它允许我传递 DataKey id (key=DataKey _id) 并获取 DataKey 和 Doc 的信息。
我的尝试:
我首先尝试将 DataKey 嵌入到文档中,并使用如下所示的映射函数:
function (doc)
{
if (doc.type == "Doc")
{
var ids = [];
for (var i in doc.keys)
ids.push(doc.keys[i]._id);
emit(ids, doc);
}
}
但我遇到了两个问题:
- 每个 DataKey 可以有多个
文档所以使用 startkey=[idhere...]
而 endkey=[idhere..., {}] 没有
工作(仅当钥匙发生时才有效
成为数组中的第一个)。
- 所有数据密钥都必须是唯一的,我不希望制作像 {_id = datakey} 这样的单独文档来保留密钥。
有谁知道我如何才能做到这一点?如果有任何不清楚的地方请告诉我。
- - -编辑 - - -
我忘了提及,在我的应用程序中,我不知道 Doc ID 是什么,所以我需要能够搜索 DataKey 的 ID。
我想你想要的是
function (doc)
{
if (doc.type == "Doc")
{
emit([doc._id, 0], doc);
}
if(doc.type == "DataKey")
{
emit([doc.data_id, 1], doc);
}
}
现在,查询视图key=["AAA"]
您将看到所有文档的列表。第一个将是真正的“Doc”文档。其余的都是引用第一个文档的“DataKey”文档。
这是一种常见的技术,称为CouchDB 视图排序规则 http://wiki.apache.org/couchdb/View_collation.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)