Querying CouchDB documents between a start date and an end date

后端 未结 4 1176
萌比男神i
萌比男神i 2020-12-14 20:02

I\'ve been trying to figure out how to create a CouchDB view that will let me query all the documents that have a start date greater than A and an end date less than B.

相关标签:
4条回答
  • 2020-12-14 20:09

    Just create a map like this:

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

    then query the view with:

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

    The view will be sorted oldest to latest so descending=true reverses that order.

    If you want a specific range.

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

    would get you everything in 1970.

    These should help:

    • http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
    • http://wiki.apache.org/couchdb/HttpViewApi
    • http://wiki.apache.org/couchdb/View_collation
    0 讨论(0)
  • 2020-12-14 20:15

    I was looking for the same thing and stumbled upon this question. With CouchDB 2.0 or higher you have the possibility of using Mango Queries, which includes greater-than and less-than.

    A mango query could look like:

    "selector": {
       "effectiveDate": {
          "$gte": "2000-04-29T00:00:00.000Z",
          "$lt": "2020-05-01T00:00:00.000Z"
       }
    }
    
    0 讨论(0)
  • 2020-12-14 20:21

    Use an array key in your map function

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

    Then to get documents with a start date greater then 1970-01-01T00:00:00Z and an end date before 1971-01-01T00:00:00Z use the query

    ?startkey=["1970-01-01T00:00:00Z", ""]&endkey=["\ufff0", "1971-01-01T00:00:00Z"]
    
    0 讨论(0)
  • 2020-12-14 20:32

    Use startkey and endkey. This way you can decide your date range at runtime without slowing down your query.

    0 讨论(0)
提交回复
热议问题