CouchDB按关键字搜索,同时按日期筛选

CouchDB按关键字搜索,同时按日期筛选,couchdb,Couchdb,我有带有日期和名称字段的文档 { 日期:“2015-07-16T09:18:36.660Z”, 名称:“澳大利亚” }, { 日期:“2015-08-12T19:11:11.320Z”, 姓名:“奥地利” }, { 日期:“2016-01-14T12:59:26.120Z”, 名称:“意大利” }, { 日期:“2019-04-28T17:42:10.520Z”, 名称:“西班牙” } 您需要将视图功能修改为: function(doc) { emit([doc.date, doc.n

我有带有日期和名称字段的文档

{
日期:“2015-07-16T09:18:36.660Z”,
名称:“澳大利亚”
},
{
日期:“2015-08-12T19:11:11.320Z”,
姓名:“奥地利”
},
{
日期:“2016-01-14T12:59:26.120Z”,
名称:“意大利”
},
{
日期:“2019-04-28T17:42:10.520Z”,
名称:“西班牙”
}

您需要将视图功能修改为:

function(doc) {
    emit([doc.date, doc.name], null);
}
startkey=["2015-01-01T00:00:00Z,"au"]&endkey=["2017-09-01T00:00:00Z","au\ufff0"]
然后你可以做一些事情,比如

function(doc) {
    emit([doc.date, doc.name], null);
}
startkey=["2015-01-01T00:00:00Z,"au"]&endkey=["2017-09-01T00:00:00Z","au\ufff0"]

当然,您需要对这些键值进行json编码。

我认为这在CouchDB current 1.6中是不可能的

有一个由Jamie Talbot制作的补丁,在a和中进行了更多的讨论,最终解决方案仅适用于2.0,实现了您的要求

此外,还为CouchDB创建了一个新的官方语言,它也将在CouchDB 2.0中使用

也就是说,如果使用Cloudant或CouchDB 2.0,我建议使用更好的查询语言

首先,您应该创建索引,
将索引描述发布到
\u索引
端点:

{
“索引”:{
“字段”:[
“日期”,
“姓名”
]
},
“类型”:“json”
}
然后您可以使用新的查询API,
POST
ing JSON到
\u find
端点。下面是一个示例,其中包含您提出的标准:

{
“选择器”:{
“日期”:{
“$gt”:“2015-01-01T00:00:00Z”,
$lt:“2017-09-01T00:00:00Z”
},
“姓名”:{
“$gt”:“au”,
$lt:“au\ufff0”
}
}
}

它在
日期
名称
选择器周围隐式使用
$和
。您可以在上面的链接中找到更多文档。

这行不通,因为CouchDB从左到右匹配键,因此将跳过第二个键“au”。如果在日期范围内,任何国家/地区都将匹配。