足球和CouchDb(用于sql和连接的noob pining)

时间:2012-08-24 00:59:23

标签: database node.js nosql couchdb nosql-aggregation

这使我保持清醒,直到这些凌晨。 我想要一个数据库来跟踪足球锦标赛。 每场比赛有两队,主场和客场。 每支球队都可以成为许多比赛的主场或客场。

我有一个数据库和两个文档类型,“匹配”(包含:home:teamId和away:teamId)和团队(包含:teamId,teamName等)。

我已经设法编写了一个工作视图,但它意味着向每个团队添加它所涉及的每个匹配的ID,这没有太多的逻辑意义 - 这是一个黑客攻击。

有关如何编写此视图的任何想法?我几乎想把海绵扔进来并改用postgres。

编辑:我想要的是获得主队和客队的球队信息,给出比赛的ID。两次通话很容易,但我不想打两次电话。

2 个答案:

答案 0 :(得分:1)

只需在map中为每个匹配发出两个值,如下所示:

function (doc) {
  if (!doc.home || !doc.away) return;
  emit([doc._id, "home"], { _id: doc.home });
  emit([doc._id, "away"], { _id: doc.away });
}

在查询匹配标识MATCHID的视图后使用:

curl 'http://localhost:5984/yourdb/_design/yourpp/_view/yourview?startkey=\["MATCHID"\]&endkey=\["MATCHID",\{\}\]&include_docs=true'

您应该能够在结果列表doc)的row字段中获取两个团队的文档,可能如下所示:

{"total_rows":2,"offset":0,"rows":[
{"id":"MATCHID","key":["MATCHID","home"],"value":{"_id":"first_team_id"},"doc":{...full doc of the first team...}},
{"id":"MATCHID","key":["MATCHID","away"],"value":{"_id":"second_team_id"},"doc":{...full doc of the second team...}}
]}

答案 1 :(得分:0)

检查CouchDB Book:http://guide.couchdb.org/editions/1/en/why.html

它是免费的,包括初学者的答案:)

如果您喜欢,请考虑购买。甚至认为克里斯和扬是如此可怕,他们只是免费将他们的书放在那里,你仍然应该支持他们对他们的书所做的出色工作。