使用CouchDB视图是否可以进行多路连接?

使用CouchDB视图是否可以进行多路连接?,couchdb,Couchdb,在MapReduce中以“sql风格”的方式连接数据是可能的,如许多地方提到的,如,和,以及发布者:p 我有3个实体: A B C A和B可以在ab列上联接,而BC可以在BC列上联接。我认为我可以通过级联MapReduce任务来实现这一点。但我不能在CouchDB中以任何方式做到这一点,无论是使用Map函数、reduce函数、list函数(使用MapReduce视图)还是这些函数的组合 在CouchDB中,您可以使用相同的连接键输出不同实体的文档。但就我所知,没有一个可能的映射函数允许通过同一个

在MapReduce中以“sql风格”的方式连接数据是可能的,如许多地方提到的,如,和,以及发布者:p

我有3个实体:

  • A
  • B
  • C
  • A
    B
    可以在
    ab
    列上联接,而
    BC
    可以在
    BC
    列上联接。我认为我可以通过级联MapReduce任务来实现这一点。但我不能在CouchDB中以任何方式做到这一点,无论是使用Map函数、reduce函数、list函数(使用MapReduce视图)还是这些函数的组合

    在CouchDB中,您可以使用相同的连接键输出不同实体的文档。但就我所知,没有一个可能的映射函数允许通过同一个键或一个键范围对多个实体进行分组


    这特别适用于每个联接的外键列都不同的联接。

    不能在CouchDB中进行级联联接

    您可以执行的唯一联接是一对多联接

    它由一个视图组成,该视图将链接文档作为值发出:

    function(doc){
        emit([doc._id,0]);
        emit([doc.ab,1],{_id:doc.ab});
    }
    

    然后使用
    ?include_docs=true进行查询

    你会得到这样的结果:

    {rows:[
        {key:["my_main_doc_id",0],doc:{my main document...}},
        {key:["my_main_doc_id",1],doc:{child doc...}}
    ]}
    

    请参见此

    这看起来像是在文档本身中创建实体关系。您还可以通过使用相同的键发送不同实体类型的文档,然后检索分组的映射索引来近似连接。但是我意识到你不能在reduce函数中进行实际的连接,因为你需要允许rereduce=true