Javascript 按父项和子项查询
我在一份文件中有这样的结构:Javascript 按父项和子项查询,javascript,couchdb,Javascript,Couchdb,我在一份文件中有这样的结构: { "_id": "a04ecdc29276760e689dd8148d000e7c", "type": "user", "user": "xxx", "categories": [ { "type": "TYPE1", "id": "3523683f7930be3a2e5c8496c800083a" }, { "t
{
"_id": "a04ecdc29276760e689dd8148d000e7c",
"type": "user",
"user": "xxx",
"categories": [
{
"type": "TYPE1",
"id": "3523683f7930be3a2e5c8496c800083a"
},
{
"type": "TYPE2",
"id": "bd2098d428d36ffd895f37b872000951"
}
]
}
现在,我希望(最好)在一个查询中获取用户及其关联的类别,这些类别的ID是对其他文档的引用,因此包含文档,并按用户和类别类型进行过滤。我做到了这一点:
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]),但鉴于类别是动态创建的,这可能不是一个选项
这甚至可以通过一个查询完成吗?您的密钥也可以是任意JSON。将“发射”更改为:
emit([doc.user,child.type],…)
那么您的starkey将是:
[“xxx”,“TYPE1”]
和结束键:
[“xxx”,“TYPE1”,“{}]