在定义偏移量和限制时在 Dexie returns 中查询无
Querying in Dexie returns nothing when offset and limit are defined
Dexie 菜鸟在这里。我正在尝试使用 Dexie.js 从 IndexedDB 中获取一些数据。我想批量获取数据(想想分页),似乎只有第一个查询有效。
这是数据:
db.friends.bulkAdd([
{name: "David", age: 42},
{name: "Neil", age: 37},
{name: "Freddie", age: 36},
{name: "Elvis", age: 56},
{name: "Calvin", age: 22},
]);
这是查询 #1:
db.friends
.orderBy('age')
.limit(2)
.offset(0)
.toArray()
.then(function(result) {
// Works as expected!
});
然后查询 #2 returns 一个空 []
:
db.friends
.orderBy('age')
.limit(2)
.offset(2)
.toArray()
.then(function(result) {
// result is []
});
如果我将 limit(2)
排除在查询 #2 之外,查询将按预期工作,但 offset()
和 limit()
一起似乎不起作用。
我在这里做错了什么?我可能只是遗漏了一些关于 Dexie 或 IndexedDB 工作原理的非常基本的东西,但有人能帮我吗?
a JSFiddle 对此进行测试。
感谢 jsfiddle。我同意我一开始读它时觉得很奇怪。然后我意识到原因是offset()和limit()的顺序。在您的示例中,您在 offset() 之前使用了 limit(),这基本上意味着:
- 将结果限制为仅 2 项。
- 从 2 项的集合中,将偏移量设置为 2,这会导致结果为零。
因此解决方案是调换限制和偏移量的顺序 - 先使用偏移量,然后对该集合应用限制。
Dexie 菜鸟在这里。我正在尝试使用 Dexie.js 从 IndexedDB 中获取一些数据。我想批量获取数据(想想分页),似乎只有第一个查询有效。
这是数据:
db.friends.bulkAdd([
{name: "David", age: 42},
{name: "Neil", age: 37},
{name: "Freddie", age: 36},
{name: "Elvis", age: 56},
{name: "Calvin", age: 22},
]);
这是查询 #1:
db.friends
.orderBy('age')
.limit(2)
.offset(0)
.toArray()
.then(function(result) {
// Works as expected!
});
然后查询 #2 returns 一个空 []
:
db.friends
.orderBy('age')
.limit(2)
.offset(2)
.toArray()
.then(function(result) {
// result is []
});
如果我将 limit(2)
排除在查询 #2 之外,查询将按预期工作,但 offset()
和 limit()
一起似乎不起作用。
我在这里做错了什么?我可能只是遗漏了一些关于 Dexie 或 IndexedDB 工作原理的非常基本的东西,但有人能帮我吗?
a JSFiddle 对此进行测试。
感谢 jsfiddle。我同意我一开始读它时觉得很奇怪。然后我意识到原因是offset()和limit()的顺序。在您的示例中,您在 offset() 之前使用了 limit(),这基本上意味着:
- 将结果限制为仅 2 项。
- 从 2 项的集合中,将偏移量设置为 2,这会导致结果为零。
因此解决方案是调换限制和偏移量的顺序 - 先使用偏移量,然后对该集合应用限制。