我试图获取具有“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"}}]}}
请帮我得到正确的查询。
由于存在JSON没有原生的日期类型,它存储日期的格式,在查询时是有意义的是非常重要的。 渲染美国观众的日期时,“月 - 日 - 年”的格式可能是有用的,但它是没有意义的查询。
我建议“YYYY-MM-DD”的格式,例如“2018年10月30日”。 该存储相同的数据,但之前的排序顺序恰好是按日期顺序排列,因为年比个月的时间和月比天以上。
然后,您可以使用通过“$ GTE”运算符的查询:
{
"selector": {
"effectiveDateOfAction": {
"$gte": "2018-10-01"
}
}
}
该读作“取文件,其‘effectiveDateOfAction’字段是大于或等于2018' 年10月1日。
见这个博客帖子上如何存储和CouchDB中查询日期。
如果可能的话,你的日期格式更改为排序形式,格林伯德说。 我建议使用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
然后,您还可以使用startkey
和endkey
参数,可以限制到特定的时间框架:
/my-database/_design/employees/_view/by_action_date?include_docs=true&startkey="2018-10-01"&endkey="2018-10-31"
这将返回您TRAN001
和TRAN002
文件。