2009-12-12 8 views
2

[email protected]交叉发送在CouchDB中,如何获取相关文档中有限的文档?在SQL方面,如何使JOIN表上的WHERE

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

人:

  • _id
  • 位置
  • 工资

汽车:

  • _id
  • PERSON_ID
  • reg_number
  • 品牌

因此,有一对多的关系。一个人可以有很多车。

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

我不能做的事是限制这种观点,只有特定品牌的所有者才会这样做。如果我需要法拉利车主的薪水。

回答

2

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

+0

你是对的,但它不是真正的生活问题:)我只想知道,如果这样的查询是可能的在CouchDB? – amorfis

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=true,this post about a race condition可能是相关的。

相关问题