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

Date 在开始日期和结束日期之间查询CouchDB文档,date,couchdb,nosql,Date,Couchdb,Nosql,我一直在想如何创建一个CouchDB视图,让我可以查询所有开始日期大于a、结束日期小于B的文档 这在CouchDB或其他noSQL文档存储中可能吗?我应该放弃它并返回SQL吗 我只是想做SQL等效的工作: 选择*其中[start timestamp]>=doc.start和[end timestamp]

我一直在想如何创建一个CouchDB视图,让我可以查询所有开始日期大于a、结束日期小于B的文档

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

我只是想做SQL等效的工作:


选择*其中[start timestamp]>=doc.start和[end timestamp] 使用。这样,您就可以在运行时决定日期范围,而不会减慢查询速度。

只需创建如下映射:

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年你会得到一切

这些措施应有助于:


在映射函数中使用数组键

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"]

我在寻找同样的东西,偶然发现了这个问题。使用CouchDB 2.0或更高版本,您可以使用,包括大于和小于

mango查询可能如下所示:

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

重复,看@PartlyCloudy我不明白这个问题是怎么重复你的问题的。您的问题在某个范围内以固定的间隔生成一系列事件,而这是为了找到某个范围内的所有值。我可能只是错误地使用了你的解决方案,但我不这么认为。这不起作用,因为有两个不同的变量,doc.start和doc.end。你给出了一个anon函数作为答案,但它完全脱离了上下文,因为你没有说在哪里或如何放置它,或将它分配给什么,或如何或如何调用它。我的意思是,我是否将其分配给文档中的var?我是否将其放置在文件中,但未指定?也许它根本就不在医生里?谁知道呢。所有的ApacheWiki链接都已经腐烂了。结束键的第一部分在这里有什么魔力?“\ufff0”是否等于无限未来中的某个日期?@noah如果开始日期匹配,则似乎不会过滤掉结束日期部分,因此使用结束键