PouchDB startkey endkey不返回文档

时间:2015-06-20 09:20:36

标签: angularjs pouchdb

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

使用chrome PouchDB扩展时,使用startkey进行查询时可以正常工作:“profile”和endkey:“profile \ 0ffff”,但由于某些原因,这在运行我的代码时不起作用(角度/离子) )。

我的代码返回一个空文档列表。当我设置启动键:“profile41”和endkey:“profile41”我确实得到了doc,所以我知道它连接并且可以从DB中检索文档。

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;
};

这将返回一个带有以下参数的空数组

startkey = "profile"
endkey = "profile\0ffff"

当参数设置为

时,返回正确的单个doc
startkey = "profile41"
endkey = "profile41"

1 个答案:

答案 0 :(得分:3)

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

确实,如果您不使用"降序:true" 您B-Tree看起来像这样:

1-  animaltypes
2 - profile41
3 - profile48
  • startkey ="轮廓"将在id 1和id 2之间
  • endkey ="轮廓\ 0FFFF"将在id 3之后

结果你将有2条记录

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

1-  profile48
2 - profile41
3 - animaltypes
  • startkey ="轮廓"将在id 2和id 3之间
  • endkey ="轮廓\ 0FFFF"将在id 2和id 3之后

结果你将有0记录。