在我的沙发上,我有这样的文档对:
{
_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 }
首先,我使用了一个 reduce 函数将两者合并为一个,但是在计时之后,在本地对它们进行分组要快得多。
但是,按照现在的方式,我无法通过“作者名”查询此视图。尤其不是因为info
没有作者名。
所以我认为有一些解决方案:
- 使用带有分组的reduce函数并操作键,以便显示作者(我什至不知道是否可以操作分组键)
- 获取所有行,在本地对它们进行分组,然后过滤我正在寻找的作者(可能太多不需要的开销)
- 拥有多个视图并执行 2 个查询。一种是获取 DOCID,然后查询 DOCID。
- 巧妙地查询并置视图:以一种有效的方式将 Authorname 包含到键和查询类型中,但我也不认为这是可能的,因为对 Authorname 的查询将排除实际的
info
.
那么你会建议继续做些什么呢?是的,信息是分开的是有原因的(几个Final
文档可以与同一个Task
文档相关,因此具有相同的信息)
最好的
编辑 提供的解决方案确实回答了我的问题,但我使用我的视图并将结果分组到我的代码(Django 视图)中,结果非常快!