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 条记录。
我在使用 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 条记录。