在CouchDB中加入三联?

时间:2014-09-05 11:11:38

标签: join couchdb

我有三种类型的文件:

  1. 问题
  2. 用户 - 包含源字段
  3. 答案 - 包含相应的问题ID和用户ID
  4. 每个问题由多个用户回答,每个用户只回答一次问题。我想为每个问题找到源“source1”的用户回答了多少答案。

2 个答案:

答案 0 :(得分:2)

我认为你越接近你想要的是以下(使用Linked documents)。

假设你有

{ "_id": "user1", "source": "source1" },
{ "_id": "user2", "source": "source2" },
{ "_id": "answer1", "question": "question1", "user": "user1" },
{ "_id": "answer2", "question": "question1", "user": "user2" }

并定义以下视图

function(doc) {
  if (doc.question) {
    emit(doc.question, {_id: doc.user});
  }
}

然后,如果使用key =“question1”并使用include_docs = true查询该视图 它将显示问题1的所有答案以及所有用户信息,您只需选择source =“source1”的那些答案。

例如,使用之前的值将返回:

{"total_rows":2,"offset":0,"rows":[
{"id":"answer1","key":"question1","value":{"_id":"user1"},"doc":{"_id":"user1","_rev":"1-c99dc8987841c25c72081a84252793a0","source":"source1"}},
{"id":"answer2","key":"question1","value":{"_id":"user2"},"doc":{"_id":"user2","_rev":"1-0d44e9f4d3806fb932b1b4fcb1e1507b","source":"source2"}}
]}

但AFAIK,你在视图的map函数中不能做的就是使用来自其他文档的信息。

答案 1 :(得分:0)

你无法在couchdb中实现这一点,并且需要使用第三方模块。

例如那一个:

sites.google.com/site/nosqldatajoiner /

或google nosql datajoiner