在CouchDB中,如何获取相关文档中有限的文档?在SQL方面,如何在JOINed表上创建WHERE

时间:2009-12-12 17:41:37

标签: couchdb

从user@couchdb.apache.org

转发

假设我们在CouchDB中有两种文档。人与车:

人:

  • _id
  • 姓名
  • 位置
  • 薪水

汽车:

  • _id
  • 为person_id
  • reg_number
  • 品牌

所以有一对多的关系。一个人可以拥有很多车。

我可以构建地图功能,让每个人和他/她的车彼此相邻。在这种情况下,键是数组[person.id,0]和[car.person_id,1]。

我不能做的是将这种观点仅限于特定品牌的所有者,例如如果我需要法拉利车主的薪水。

2 个答案:

答案 0 :(得分:2)

除非你真的需要将汽车连接到一个以上的人身上,否则我认为将人员所拥有的汽车与人员文件存储为子对象要容易得多。它会使查询更容易编写。

答案 1 :(得分:2)

您可以尝试这样的地图功能:

function(doc)
{
    if (doc.type == 'car')
    {
        emit(doc.brand, {'_id' : doc.person_id});
    }
}

根据CouchDB Wiki,从版本0.11开始:

  

如果发出具有的对象值   {'_id': XXX}然后include_docs=true   将获取ID为XXX的文档   而不是文件   处理以发出键/值对。

这本身不会给你工资,但是你会得到包含工资的人员文件。

注意:要使用include_docs=truethis post about a race condition可能相关。