如何使用值在范围内搜索来查找文档?
How to find a document using a value to search in a range?
数据库是IP地址的地理定位范围,每个文档是这样的;
{
"_id": "1000013824",
"_rev": "1-b747bd47d44efe619c9b4f8d867131ad",
"f": "1000079359",
"p": "CN"
}
我创建了一个视图来生成如下输出:
"total_rows":202238,"offset":0,"rows":[
{"id":"0","key":["0","16777215"],"value":"ZZ"},
{"id":"1000013824","key":["1000013824","1000079359"],"value":"CN"},
{"id":"1000079360","key":["1000079360","1000083455"],"value":"JP"},
{"id":"1000083456","key":["1000083456","1000084479"],"value":"JP"},
但我无法搜索到一个值,例如,1000013825,这是第一个文档,但该值不对应于 startkey 或 endkey。我怎样才能做到这一点?
使用 JS 和数组中的数据,我可以这样做:
return array.find(doc=> {
if (doc._id <= this && doc.f >= this) {
return doc.p;
}
};
但我不知道如何在 CouchDB 2.3.1 中做到这一点。
假设您使用的是 CouchDB Core API,您可以使用 POST /{db}/_find
和以下请求正文从数据库(而不是视图)查询文档:
{
"selector": {
"f": {"$gte": value }
},
"fields": ["f", "p"],
"sort":[
{"f": "asc"}
],
"limit": 1
}
Please note that an index must previously be created for the sort field f
(see /db/_index).
数据库是IP地址的地理定位范围,每个文档是这样的;
{
"_id": "1000013824",
"_rev": "1-b747bd47d44efe619c9b4f8d867131ad",
"f": "1000079359",
"p": "CN"
}
我创建了一个视图来生成如下输出:
"total_rows":202238,"offset":0,"rows":[
{"id":"0","key":["0","16777215"],"value":"ZZ"},
{"id":"1000013824","key":["1000013824","1000079359"],"value":"CN"},
{"id":"1000079360","key":["1000079360","1000083455"],"value":"JP"},
{"id":"1000083456","key":["1000083456","1000084479"],"value":"JP"},
但我无法搜索到一个值,例如,1000013825,这是第一个文档,但该值不对应于 startkey 或 endkey。我怎样才能做到这一点? 使用 JS 和数组中的数据,我可以这样做:
return array.find(doc=> {
if (doc._id <= this && doc.f >= this) {
return doc.p;
}
};
但我不知道如何在 CouchDB 2.3.1 中做到这一点。
假设您使用的是 CouchDB Core API,您可以使用 POST /{db}/_find
和以下请求正文从数据库(而不是视图)查询文档:
{
"selector": {
"f": {"$gte": value }
},
"fields": ["f", "p"],
"sort":[
{"f": "asc"}
],
"limit": 1
}
Please note that an index must previously be created for the sort field
f
(see /db/_index).