我一直在试图弄清楚如何创建一个CouchDB视图,让我查询开始日期大于A且结束日期小于B的所有文档。
这在CouchDB或其他noSQL文档存储中是否可行?我应该废弃它并返回SQL吗?
我只是想尝试SQL的等价物:
SELECT * WHERE [start timestamp]> = doc.start AND [end timestamp]< doc.end;
答案 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
。这样,您可以在运行时决定日期范围,而不会降低查询速度。