我在文档中有这个结构:
{
"_id": "a04ecdc29276760e689dd8148d000e7c",
"type": "user",
"user": "xxx",
"categories": [
{
"type": "TYPE1",
"id": "3523683f7930be3a2e5c8496c800083a"
},
{
"type": "TYPE2",
"id": "bd2098d428d36ffd895f37b872000951"
}
]
}
现在,我希望(最好)在一个查询中获取用户和他/她的相关类别,其id是对其他文档的引用,因此include_docs,按用户和类别类型进行过滤。我做到了这一点:
function (doc) {
if (doc.type === "user") {
emit(doc.user, null);
if (doc.categories) {
for (var i = 0, child; child = doc.categories[i]; ++i) {
emit(child.type, {_id: child.id});
}
}
}
}
我可以使用http get:
运行它http://localhost:5984/_design/foo/_view/by_user?startkey=["xxx"]&endkey["xxx",{}]&include_docs=true
将为我提供用户和相关类别,而不考虑类别类型。
我如何查询用户和类别类型作为关键参数?我知道我可以为每个类别类型创建一个视图并发出([doc.user,doc.TYPE]),但看到类别是动态创建的,这可能不是一个选项。
这可以通过一个查询来完成吗?
答案 0 :(得分:0)
您的密钥也可以是任意JSON。将您的发射更改为:
emit([doc.user, child.type], ...)
然后你的星空将是:
["xxx", "TYPE1"]
和endkey:
["xxx", "TYPE1", {}]