创建一个视图,用于获取结束时间等于或大于当前时间和类型的文档列表

时间:2014-05-09 12:01:19

标签: javascript mapreduce couchdb

我需要创建一些复杂的查询,请你帮我写一下。

在我的数据库中,我有文档列表,例如:

{
  "_id": "26",
  "_rev": "1-53ac67e9ec4b4ce8ffa9cd609e107aaf",
  "customer_name": "Praneeth",
  "type": "trip",
  "duration": "10 hours 27 mins",
  "end_time": "Jan 1, 2014 10:11:00 PM",
  "start_time": "Jan 11, 2014 8:46:00 AM",
} 

现在,我想创建一个可以读取当前timestamp的视图,并从网址中输入以获取end_time小于或等于当前timestamp且类型为{的文档{1}}。这里的类型可能不仅仅是"trip",基于从我应该获取文档的URL传递的trip

假设我在SQL中编写,查询它将是这样的:

type

我的观点如下所示如何从URL调用此视图以获得所需的输出

 SELECT * FROM table_name WHERE end_time>="current time passed from the URL as key" and type='type passed from the url as key'

低于一个是正确的?

    function(doc){
var startTime=new Date(doc.start_time);
var endTime=new Date(doc.end_time);
emit([doc.type,endTime.getTime()], doc);
    }      

2 个答案:

答案 0 :(得分:0)

解决方案只是发布视图[trip, end_time]的地图功能。 CouchDB对数组键顺序的规则是按字典顺序对其进行排序。示例数据集将按如下方式排序:

{ end_time: 40, trip: "ABC", ... },
{ end_time: 10, trip: "BCA", ... },
{ end_time: 20, trip: "BCA", ... },
{ end_time: 30, trip: "CAB", ... },
...

如果您希望将客户的日期最多end_time与最近的end_time一起使用,您可以将查询参数descending=true视为非常有用(或发出[trip, -end_time]更有用的内容如果你需要在键数组中有不同的字段顺序。)

答案 1 :(得分:0)

这可能对您有用...假设您只想与“现在”进行比较,您不必担心在网址上传递任何参数。只需正常访问视图。

function(doc) {
    var now = new Date();
    var endTime = new Date(doc.end_time);        
    if(doc.type == \"trip\" &&  endTime > now)
        emit( ... );
}