如何在特定的日期后提取记录(How to fetch records after a particu

2019-11-05 08:15发布

我试图获取具有“effectiveDateOfAction”较场Oct'2017更大的记录。 请找到下面3条记录。

{
 "_id": "TRAN001",
 "_rev": "13-59a53069c1ebd6ecfc23ca1dea0ba28f",
 "effectiveDateOfAction": "10-30-2018",
 "employeeName": "Kumar,Vinoth",
 "transferReportID": "TRAN001",
 "~version": "76:0"
}

{
 "_id": "TRAN001",
 "_rev": "12-c320c61168f5d6d020f971124cb395f2",
 "effectiveDateOfAction": "05-10-2018",
 "employeeName": "Vinoth",
 "transferReportID": "TRAN002",
 "~version": "77:0"
}

{
 "_id": "TRAN003",
 "_rev": "16-567a15e9ea7e2349d4c24816e7eafda3",
 "effectiveDateOfAction": "10-20-2017",
 "employeeName": "Kumar",
 "transferReportID": "TRAN003",
 "~version": "78:0"
}

请找我的查询下面我tried.I使用Project Fauxton我检查。

{"selector": {"$and": [{"transferReportID": {"$ne": null}},{"effectiveDateOfAction": {"$gt": "10-31-2017"}}]}}

请帮我得到正确的查询。

Answer 1:

由于存在JSON没有原生的日期类型,它存储日期的格式,在查询时是有意义的是非常重要的。 渲染美国观众的日期时,“月 - 日 - 年”的格式可能是有用的,但它是没有意义的查询。

我建议“YYYY-MM-DD”的格式,例如“2018年10月30日”。 该存储相同的数据,但之前的排序顺序恰好是按日期顺序排列,因为年比个月的时间和月比天以上。

然后,您可以使用通过“$ GTE”运算符的查询:

{
  "selector": {
    "effectiveDateOfAction": {
      "$gte": "2018-10-01"
     }
  }
}

该读作“取文件,其‘effectiveDateOfAction’字段是大于或等于2018' 年10月1日。

见这个博客帖子上如何存储和CouchDB中查询日期。



Answer 2:

如果可能的话,你的日期格式更改为排序形式,格林伯德说。 我建议使用ISO_8601 ,这是preferd的JSON(如Java描述语言Date.toJSON )。

如果你不能改变你的数据,你可以创建一个视图,其转换日期为排序格式。

例如:把类似设计文档以下到您的数据库

{
  _id: '_design/employees',
  views: {
    by_action_date: {
      map: "function (doc) {\n        if (doc.effectiveDateOfAction && doc.employeeName) { // filter for employee docs\n          var dt = doc.effectiveDateOfAction.split('-'); // parse your date format\n          emit(`${dt[2]}-${dt[1]}-${dt[0]}`); // emit iso date as key\n        }\n      }"
    }
  }
}

map功能,必须给出文件中的字符串,格式是:

function(doc) {
    if (doc.effectiveDateOfAction && doc.employeeName) { // filter for employee docs
      var dt = doc.effectiveDateOfAction.split('-'); // parse your date format
      emit(`${dt[2]}-${dt[1]}-${dt[0]}`); // emit iso date as key
    }
  }

然后,您可以查询它让你的员工进行排序:
使用include_docs = true参数去得到你真正的文件包括在内。

/my-database/_design/employees/_view/by_action_date?include_docs=true

然后,您还可以使用startkeyendkey参数,可以限制到特定的时间框架:

/my-database/_design/employees/_view/by_action_date?include_docs=true&startkey="2018-10-01"&endkey="2018-10-31"

这将返回您TRAN001TRAN002文件。



文章来源: How to fetch records after a particular date