Join 能否使用CouchDB 2.0';芒果;?

Join 能否使用CouchDB 2.0';芒果;?,join,mapreduce,couchdb,couchdb-2.0,couchdb-mango,Join,Mapreduce,Couchdb,Couchdb 2.0,Couchdb Mango,从CouchDB 1.6.1之前的工作中,我知道可以通过以下几种方式实现文档连接: 例如,使用“学生和“课程”的简单模式: // Students table | Student ID | Student Name | XYZ1 | Zach // Courses table | Course ID | Student ID | COURSE1 | XYZ1 此SQL查询: SELECT [Student Name], [Course ID] FROM Students

从CouchDB 1.6.1之前的工作中,我知道可以通过以下几种方式实现文档连接:

例如,使用“学生<代码>和“课程”的简单模式:

// Students table
| Student ID | Student Name
| XYZ1       | Zach

// Courses table
| Course ID  | Student ID
| COURSE1    | XYZ1
此SQL查询:

SELECT [Student Name], [Course ID] FROM Students RIGHT OUTER JOIN Courses ON Students.[Student ID] = Courses.[Student ID]
可在CouchDB 1.6中通过映射功能实现:

// Map function
function(doc){
    if (doc.type == 'Course') emit(doc["Student ID"], doc);
    if (doc.type == 'Student') emit(doc["Student ID"], doc)
}
或者是一个组,或者是一个reduce函数

// Group would produce:
Student ID: [{course doc}, {student doc}, {course doc}, etc]

// Reduce would allow you to then process student and course docs for a single ID (with CouchDB protesting about expanding view indexes)
或者,您可以使用列表函数迭代分组或非分组映射索引

查看Mango的文档,有人提到_find(我假设它是‘Mango端点’)使用索引。我看不出一个字段等于另一个字段的说法,但我对芒果一点也不熟悉

问题:

  • 你能“模仿”芒果中的文档加入吗
  • 如果可以,这会比使用MapReduce做同样的事情更好还是更糟

  • 我想你已经弄明白了,但要注意记录:你可以使用相等选择器,并将它们放在OR运算符中

    查询应该如下所示:

    {"studentId": "SOMEID" }
    {"$or": [{"type": {"$eq": "Student"}}, {"type": {"$eq": "Course"}}]}
    

    也就是说,您似乎试图在CouchBb中处理原始关系数据。正如我经常说的,你不能仅仅在CouchDb中转储关系数据,然后期望过上幸福的生活。您可能想考虑将关系数据转换为富域对象,然后将其存储在CoucDB中。

    在此情况下,我的关系数据具有不一致的模式。例如,如果我有一个名为
    Books
    的实体,数据来自10个不同的书店。因此,每家书店的行都是书,但列的名称不同。我的意图是将所有的“书”刮到沙发上,然后创建一个视图,将所有的书行“展平”成一个实体。你对此有什么看法?如果我理解正确的话,
    Books
    实体最初不是扁平的,它是一个“正常”的嵌套结构。您打算如何查询数据?您知道在查询时要检索的图书类型吗?(基本上,我需要知道你想要实现什么,因为有不止一种方法)我意识到这可能与你原来的问题没有直接关系,你介意创建另一个问题,并从这里链接它,这样我们就有更多的空间和背景来讨论它。这是: