1

我在沙发数据库中有两种类型的文档。有事件和事件。一个事件有很多次发生。

事件:

{
  "_id": "49bb92b8896515a2994e524b38a041d3",
  "type": "Event",
  "eventID": 1234,
  "area": "m1"
}

发生:

{
  "_id": "49bb92b8896515a2994e524b38a041d4",
  "type": "Occurence",
  "occurenceID": 7890,
  "eventID": 1234,
  "date": "2013-01-01"
}

我需要找到按区域名称和日期范围过滤的每个日期的出现次数。在 SQL 中,我会使用这个查询:

SELECT Date, count(*)
FROM Event INNER JOIN Occurence ON Occurence.EventID = Event.EventID
WHERE Event.Area = "m1"
AND Occurence.Date BETWEEN '2013-01-01' AND '2013-02-01'
GROUP BY Date

我不介意执行一个以上的查询,但我的数据库有超过 300,000 个出现文档(并且会增长 10 倍),所以我需要通过尽可能少的文档转移来获得结果。查询这个 couchdb 的应用程序是用 node.js 编写的。

4

1 回答 1

1

是的,我认为这需要两个查询才能正确。您应该考虑通过将事件区域复制到发生文档中来进行非规范化,这样会更容易。

于 2013-03-19T13:59:04.330 回答