如何创建CouchDB视图以基于多个非唯一字段连接文档

如何创建CouchDB视图以基于多个非唯一字段连接文档,couchdb,Couchdb,我有一个数据库,其中包含以下形式的文档: {“类型”:“A”,“日期”:“2013-09-19”,“周”:“A”,“日”:“周一”} {“类型”:“B”,“周”:“A”,“日”:“周一”,“班级”:“xyz”} 如何创建一个视图,列出特定日期(从doc.Type=“a”)的所有类(从doc.Type=“B”)?本质上,它意味着匹配“周”和“日”字段。我已经找到了一些示例(大部分基于Christopher Lenz的解决方案),但这些都是基于一个匹配字段的匹配,这在一种文档类型中是唯一的 更新 为

我有一个数据库,其中包含以下形式的文档:

{“类型”:“A”,“日期”:“2013-09-19”,“周”:“A”,“日”:“周一”}

{“类型”:“B”,“周”:“A”,“日”:“周一”,“班级”:“xyz”}

如何创建一个视图,列出特定日期(从doc.Type=“a”)的所有类(从doc.Type=“B”)?本质上,它意味着匹配“周”和“日”字段。我已经找到了一些示例(大部分基于Christopher Lenz的解决方案),但这些都是基于一个匹配字段的匹配,这在一种文档类型中是唯一的

更新 为了澄清对@Daniel的回应:


我希望能够在URL查询中输入日期。这将与“a”类单据相匹配。因此,我希望所有类型B的文档都具有与原始类型A相同的周和日值。

阅读本文,我不知道如何在沙发上仅通过一次查询(您一次只能查询一个视图),因为类型B的文档没有
日期
字段。文档类型B中的否<代码>日期使得无法使用复合键查看单个视图。您可以在两个查询中轻松完成,无需进行文档更改/重组

在类型a视图上,通过
date
进行的第一次查询将为您提供第二次查询所需的
day
week

第二个查询将针对具有如下复合键的视图运行

"views": {
    "type-A-by-date": {
        "map": "function(doc) { 
            if (doc.type && (doc.type == 'A') { 
                emit([doc.date], [doc.week,doc.day]); 
            } 
        }"
   },
    "type-B-by-week-day": {
        "map": "function(doc) { 
            if (doc.type && doc.type == 'B') { 
                emit([doc.week,doc.day], doc); 
            } 
        }"
   },
现在,您将拥有与原始
日期
查询匹配的
类型的B文档


LMK如果您需要更多信息:-)

您可以使用本文中讨论的CouchDb连接技术吗:@Daniel我已经看过那篇文章了。对我来说,重组数据不是一个选项,底部的解决方案与Lenz的解决方案相同——我似乎无法在我的情况下实现这一点:doc.Type=“A”的键是日期,但doc.Type=“B”的键是日期这是一周又一天,我的大脑无法找出一个开始键和结束键模式,它将以所需的顺序返回文档(并不是说用这种方法不一定可行,我只是还看不到!)。搜索是针对[周,天]还是日期进行的?如果第一个不允许类型A的[Week,Day,0]和类型B的[Week,Day,1]工作,那么使用startkey和endkey进行查询,并且可能输出B的类@Daniel好的,那实际上是Lenz的网站,但我也在很多其他地方看到了它的出现。谢谢你的澄清