在开始日期和结束日期之间查询CouchDB文档

时间:2010-07-09 22:09:30

标签: date couchdb nosql

我一直在试图弄清楚如何创建一个CouchDB视图,让我查询开始日期大于A且结束日期小于B的所有文档。

这在CouchDB或其他noSQL文档存储中是否可行?我应该废弃它并返回SQL吗?

我只是想尝试SQL的等价物:

SELECT * WHERE [start timestamp]> = doc.start AND [end timestamp]< doc.end;

4 个答案:

答案 0 :(得分:8)

只需创建一个这样的地图:

function (doc) {emit(doc.timestamp, 1)}

然后使用以下方法查询视图:

?descending=true&limit=10&include_docs=true // Get the latest 10 documents

视图将从最旧到最新排序,因此descending=true会反转该顺序。

如果你想要一个特定的范围。

?startkey="1970-01-01T00:00:00Z"&endkey="1971-01-01T00:00:00Z"

将在1970年为您提供一切。

这些应该有所帮助:

答案 1 :(得分:3)

在地图功能中使用数组键

function (doc) {
  var key = [doc.start, doc.end]
  emit(key, doc)
}

然后获取开始日期大于 1970-01-01T00:00:00Z 的文档和 1971-01-01T00:00:00Z 之前的结束日期使用查询

?startkey=["1970-01-01T00:00:00Z", ""]&endkey=["\ufff0", "1971-01-01T00:00:00Z"]

答案 2 :(得分:1)

我一直在寻找同一件事,却偶然发现了这个问题。在CouchDB 2.0或更高版本中,您可以使用Mango Queries,其中包括大于和小于。

芒果查询可能类似于:

"selector": {
   "effectiveDate": {
      "$gte": "2000-04-29T00:00:00.000Z",
      "$lt": "2020-05-01T00:00:00.000Z"
   }
}

答案 3 :(得分:0)

使用startkey and endkey。这样,您可以在运行时决定日期范围,而不会降低查询速度。