0

该数据库是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 中做到这一点。

4

1 回答 1

0

假设您使用的是 CouchDB Core API,您可以使用POST /{db}/_find以下请求正文从数据库(而不是视图)中查询文档:

{
    "selector": {
        "f": {"$gte": value }
    },
    "fields": ["f", "p"],
    "sort":[ 
        {"f": "asc"}
    ],
    "limit": 1
}

请注意,必须事先为排序字段创建索引f(请参阅/db/_index)。

于 2019-12-16T12:16:51.887 回答