我有两个看起来有点像这样的文件:
Doc
{
_id: AAA,
creator_id: ...,
data: ...
}
DataKey
{
_id: ...,
credits_left: 500,
times_used: 0,
data_id: AAA
}
我想要做的是创建一个视图,允许我传递DataKey id(key = DataKey _id)并获取DataKey和Doc的信息。
我的尝试:
我首先尝试在Doc中嵌入DataKey,并使用类似的map函数:
function (doc)
{
if (doc.type == "Doc")
{
var ids = [];
for (var i in doc.keys)
ids.push(doc.keys[i]._id);
emit(ids, doc);
}
}
但我遇到了两个问题:
有没有人有想法我怎么能做到这一点?如果有什么不清楚,请告诉我。
----- ----- EDIT
我忘了在我的应用程序中提到我不知道Doc ID是什么,所以我需要能够搜索DataKey的ID。
答案 0 :(得分:11)
我认为你想要的是
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 view collation。