这使我保持清醒,直到这些凌晨。 我想要一个数据库来跟踪足球锦标赛。 每场比赛有两队,主场和客场。 每支球队都可以成为许多比赛的主场或客场。
我有一个数据库和两个文档类型,“匹配”(包含:home:teamId和away:teamId)和团队(包含:teamId,teamName等)。
我已经设法编写了一个工作视图,但它意味着向每个团队添加它所涉及的每个匹配的ID,这没有太多的逻辑意义 - 这是一个黑客攻击。
有关如何编写此视图的任何想法?我几乎想把海绵扔进来并改用postgres。
编辑:我想要的是获得主队和客队的球队信息,给出比赛的ID。两次通话很容易,但我不想打两次电话。答案 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
它是免费的,包括初学者的答案:)
如果您喜欢,请考虑购买。甚至认为克里斯和扬是如此可怕,他们只是免费将他们的书放在那里,你仍然应该支持他们对他们的书所做的出色工作。