在我的沙发上我有这样的文件对:CouchDB的:并置的看法和键
{
_id: "DOCID",
type: "Task",
info: { k1: "v1", k2: "v2" }
}
{
_id: "ANOTHER DOCID",
type: "Final",
task: "DOCID",
author: "Authorname"
}
对于一个作家,这几条对可能存在。
我现在需要一个视图,它将以某种方式给我提供信息,author
伴随着info
。
使用视图搭配我创建了以下观点:
function(doc) {
if (doc.doc_type == "Final")
emit([doc.task, 0], doc.author);
if (doc.doc_type == "Task")
emit([doc._id, 1], doc.definition);
}
而我得到的结果类似这样:
["153b46415108e95c811e1d4cd018624f", 0] -> "Authorname"
["153b46415108e95c811e1d4cd018624f", 1] -> { info here }
首先,我使用了减少功能都整合到一个,但时间后它在本地分组速度更快。
但是,现在的方式是,我无法通过“Authorname”查询此视图。尤其不是因为info
未附带Authorname。
所以有一些解决方案,这一点,我想:
- 使用减少函数分组和操作键,它显示了作者(我不知道,如果操纵分组的关键是可能的)
- 获取所有行,将它们分组到本地,并筛选我正在查找的作者(可能过多的不需要的开销)
- 有多个视图并执行2个查询。一个获得DOCID,然后查询DOCID。
- 巧妙地查询搭配视图:以有效的方式将关键字和类型的查询包括到查询中,但我也不认为这是可能的,因为对Authorname的查询将排除实际的
info
。
那么,你会推荐继续这样做吗? 是的存在是为什么信息是独立的(几个Final
文档可以与同一Task
文件,因此具有相同的信息)
最佳
编辑 所提供的解决方案的一个原因,确实回答我的问题,但是我使用我的视图并将结果分组在我的代码(一个Django视图)中,结果非常快!
谢谢你教我这个!你可能会考虑修复你的视图代码。但是,我尽量避免提取整个Task文档,因为它包含大量数据,我不想提取,因为这种情况下它没有用处和缓慢。因此,我需要采取更复杂的方法。 – enpenax
@ user2033511你可以检查编辑的答案是否能解决你的问题。 –
它有一种,但我现在用一种使用我的视图和手动过滤输出的方法,结果是速度提高了10倍(在我的情况下)。所以我会接受你的答案,因为它确实回答了这个问题,但对于我的特殊情况,我找到了一个解决方案 – enpenax