8

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

var keyRange = IDBKeyRange.lowerBound('');

它不存在吗?

4

3 回答 3

10

当您遍历结果时,您可以随时停止。像这样的东西应该工作:

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 显式地仅返回某个范围。但一般情况并非如此。

于 2012-08-28T21:01:54.720 回答
2

一个重要的修复它的替换:

if (cursor && i < limit) {

为了

if (cursor && results.length < limit) {

请记住,它是一个异步调用,它可能同时在“结果”上添加元素,而“i”将没有正确的值。

于 2014-09-07T17:10:19.927 回答
0

您甚至可以使用IDBKeyRange.bound功能在 indexedDB 中按范围搜索

IDBKeyRange.bound(keyValueFrom, keyValueTo, false, true);

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

有关 IDBKeyRange 的详细信息,请访问W3C IndexedDB 页面

于 2012-08-28T13:14:26.033 回答