PouchDB startkey endkey 不返回文档

PouchDB startkey endkey not returning docs

我在使用 startkey 和 endkey 从 PouchDB 中检索选定的几个文档时似乎遇到了问题。我需要使用以 "profile" 开头的密钥取回文档(在此示例中为 profile41 和 profile48)。

当使用 chrome PouchDB 扩展时,这在使用 startkey:"profile" 和 endkey:"profile[=32=]ffff" 进行查询时工作正常,但由于某些原因,这不起作用当 运行 我的代码 (angular/ionic)。

我的代码 returns 一个空文档列表。当我设置 startkey:"profile41" 和 endkey:"profile41" 时,我确实取回了文档,所以我知道它已连接并可以从数据库中检索文档。

PS:第一次使用PouchDB,所以我可能忽略了一些简单的地方。

我的数据库中的一些文件

{
  "_id": "animaltypes",
  "_rev": "7-e413c314272a62a6a14ed293f5f934cf",
  "value": {
    "rev": "7-e413c314272a62a6a14ed293f5f934cf"
  },
  "key": "animaltypes"
}
{
  "_id": "profile41",
  "_rev": "3-f4065b825d304d79479e3576409ce744",
  "value": {
    "rev": "3-f4065b825d304d79479e3576409ce744"
  },
  "key": "profile41"
}
{
  "_id": "profile48",
  "_rev": "3-5e62a6e33f022a8ac30d46b80126dedd",
  "value": {
    "rev": "3-5e62a6e33f022a8ac30d46b80126dedd"
  },
  "key": "profile48"
}

我的 javascript 检索文档

this.getData = function(keystart,keyend){
    var deferred = $q.defer();
    localDB.allDocs({include_docs: true, 
                     descending: true, 
                     startkey:keystart, 
                     endkey:keyend}, function(err, doc) {
        if (err) {
            deferred.reject(err);
        } else {
            var rows = [];
            for (var x in doc.rows) {
                rows.push(doc.rows[x].doc.data);
            }
            deferred.resolve(rows);
        }
    });
    return deferred.promise;
};

这是一个 returns 具有以下参数的空数组

startkey = "profile"
endkey = "profile[=12=]ffff"

当参数设置为

时,此 returns 是正确的单个文档
startkey = "profile41"
endkey = "profile41"

如果你想使用"descending:true"你必须改变startkey和endkey的顺序。

确实,如果你不使用 "descending:true",你的 B-Tree 看起来像这样:

1-  animaltypes
2 - profile41
3 - profile48
  • startkey="profile"会在id 1和id 2之间
  • endkey="profile[=41=]ffff" 会在 id 3
  • 之后

结果你将有 2 条记录

如果你使用 "descending=true" 你的 B-Tree 看起来像这样:

1-  profile48
2 - profile41
3 - animaltypes
  • startkey="profile" 会在id 2和id 3之间
  • endkey="profile[=41=]ffff" 会在 id 2 和 id 3 之后

结果您将有 0 条记录。