在 CouchDB 中链接文档

Posted

技术标签:

【中文标题】在 CouchDB 中链接文档【英文标题】:Link documents in CouchDB 【发布时间】:2014-06-25 10:54:21 【问题描述】:

我的沙发数据库中有两种类型的文档(都在同一个数据库中),现在我创建了一个视图,它可以通过“_id”链接两个文档并使用沙发数据库视图 URL 返回数据.现在我想从地图函数中的两种类型中获取数据。文档类型和代码如下所示。

文档

department 
               "_id": "1", 
               "department": "Computers",
               "type": "Department", 
               "room_no": "102", 
               "HOD": "Mr. G Rahul",
               "floor": "1st Floor" 
            

student 
             "_id": "fdf370e2f43d4af1b505b8913502a5e4",
             "_rev": "1-16df9a4cd45ca69009ab6c9767425a8e",
             "student Name": "H Ravi",
             "date_of_birth": "March 1, 1993",
             "roll_no": "55",
             "inter_marks": "820",
             "secondary_marks": "420"
             "department_id": "1",
             "type": "student"
         

地图功能

function(doc) 
          var id,department,student,hod,dob;
          if(doc.type == 'student') 
                  id = doc.department_id;
                  dob = new Date(doc.date_of_birth)
              student = doc;    
         
         if(doc.type == 'department') 
           if(doc._id == 'id') 
           hod = doc.HOD;
               department = doc;
         
         
   emit([dob,hod], '_id': id,"student_doc": student,"depart_doc":department);
 

第二个 if 条件没有在上述函数中执行。上面的代码只是ma​​p-function

【问题讨论】:

【参考方案1】:

将两个测试包装在一个 if 语句中:

function(doc) 
    var id,department,student,hod,dob;
    if(doc.type) 
      if(doc.type === 'student')  ... 
      if(doc.type === 'department')  ... 
    
    emit([dob,hod], '_id': id,"student_doc": student,"depart_doc":department);
 

【讨论】:

这里我的主要问题是“基于学生类型文档中的 department_id 我想通过使用 map-function 获取部门类型文档 这样不行。 map 函数一次只检查一个文档并发出您从该文档中指定的字段。 为什么将其包装在单个 if 中使其工作?

以上是关于在 CouchDB 中链接文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 在 Couchdb 中显示所有文档

CouchDB 复制而不删除文档

限制在 couchdb 中匿名删除文档

将所有文档关系的日志保存为CouchDB中的反模式吗?

CouchDB查询文档

CouchDB查询文档