Indexeddb:如何限制返回的对象数量?

时间:2012-08-28 08:40:07

标签: javascript indexeddb

我正在使用带有下限范围查询的游标。我找不到限制返回对象数量的方法,类似于数据库中的“LIMIT n”子句。

var keyRange = IDBKeyRange.lowerBound('');

它不存在吗?

3 个答案:

答案 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函数

在indexedDB中按范围搜索
IDBKeyRange.bound(keyValueFrom, keyValueTo, false, true);

您可以设置起始值,结束值以及是否应在返回的项目中包含起始值和结束值。在我的情况下,我想要范围的第一个值,但我想排除最后一个值。

有关IDBKeyRange的详情,请访问W3C IndexedDB page