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”,“{}]