我正在使用带有下限范围查询的游标。我找不到限制返回对象数量的方法,类似于数据库中的“LIMIT n”子句。
var keyRange = IDBKeyRange.lowerBound('');
它不存在吗?
答案 0 :(得分:8)
当您迭代结果时,您可以随时停止。这样的事情应该有效:
var results = [];
var limit = 20;
var i = 0;
objectStore.openCursor().onsuccess = function (event) {
var cursor = event.target.result;
if (cursor && i < limit) {
results.push(cursor.value);
i += 1;
cursor.continue();
}
else {
// Do something with results, which has at most 20 entries
console.log(results);
}
};
此外,在您根据由序列号组成的键进行选择的特殊情况下,您可以使用keyRange显式返回特定范围。但通常情况并非如此。
答案 1 :(得分:2)
取而代之的重要修复:
if (cursor && i < limit) {
代表
if (cursor && results.length < limit) {
请记住它是一个异步调用,它可以在&#34;结果&#34;上添加元素。在同一时间和&#34;我&#34;没有适当的价值。
答案 2 :(得分:0)
您甚至可以使用IDBKeyRange.bound
函数
IDBKeyRange.bound(keyValueFrom, keyValueTo, false, true);
您可以设置起始值,结束值以及是否应在返回的项目中包含起始值和结束值。在我的情况下,我想要范围的第一个值,但我想排除最后一个值。
有关IDBKeyRange的详情,请访问W3C IndexedDB page