如何在 indexedDB 中执行 "select * from table where indexA >= 'a' order by indexB ASC limit 10"?
How to do "select * from table where indexA >= 'a' order by indexB ASC limit 10" in indexedDB?
目前正在学习javascript IndexedDB,使用时发现无法进行复杂的查询。现在我想做一个 select 查询,比如
"select * from table where indexA >= 'a' order by indexB ASC limit 10"
我尝试使用
store.createIndex("indexA, indexB", ["indexA","indexB"])
并尝试提出类似
的请求
store.index("indexA, indexB").openCursor(IDBKeyRange.lowerBound([1, "a"], true))
但是结果只根据 indexA 排序。有什么办法吗?
你必须自己滚动。基本上有两种方法:
- 像你所做的那样在 'indexA' 上使用索引,打开一个具有下限 'a' 的游标并迭代,累积所有结果,然后按 indexB 排序,并选择前 10 个。
- 在 'indexB' 上使用索引,打开游标并迭代,跳过任何 indexA < 'a' 的条目,并在遇到 10 后停止。
链接主题(感谢其他 Josh!)提供了更多详细信息。
目前正在学习javascript IndexedDB,使用时发现无法进行复杂的查询。现在我想做一个 select 查询,比如
"select * from table where indexA >= 'a' order by indexB ASC limit 10"
我尝试使用
store.createIndex("indexA, indexB", ["indexA","indexB"])
并尝试提出类似
的请求
store.index("indexA, indexB").openCursor(IDBKeyRange.lowerBound([1, "a"], true))
但是结果只根据 indexA 排序。有什么办法吗?
你必须自己滚动。基本上有两种方法:
- 像你所做的那样在 'indexA' 上使用索引,打开一个具有下限 'a' 的游标并迭代,累积所有结果,然后按 indexB 排序,并选择前 10 个。
- 在 'indexB' 上使用索引,打开游标并迭代,跳过任何 indexA < 'a' 的条目,并在遇到 10 后停止。
链接主题(感谢其他 Josh!)提供了更多详细信息。