Indexeddb:使用通配符进行搜索
Indexeddb: search using wildcards
我想知道是否可以使用通配符对indexeddb对象存储执行搜索。查找所有键以"555"开头的对象会很方便,例如
使用复合键或键片段可以开箱即用。键在IndexedDB中的工作方式是生成一个"keyRange"对象并将其传递给游标调用。keyrange传递信息,如"从A开始,到Z结束,包括在内。"
从本质上讲,这里面有部分匹配;缺点是,您的光标将返回位于键之间的任何键,您可能需要进一步筛选这些结果。
假设您在对象存储中有以下单词作为密钥:
- Aardvark
- 苹果
- 谷歌
- Microsoft
键范围"A到Z,包括在内"将返回所有这些,但"Ap到Z,包含在内"将只返回最后三个。
我用来实现这一点的另一种技术是向调用IndexedDB的方法传递一个"filter"函数。在方法onsuccess回调中,通过过滤函数传递结果(event.target.result
),如果返回true,则调用方法调用程序的onsuccess回调。
是的,使用通配符是可行的。
我还不能投票,甚至不能对之前的答案发表评论(嗯…),所以我只重复用户2025527的答案,因为它完全符合我的需求。
使用bounds方法,为第一个参数指定基值,为第二个参数指定相同的值加上一个额外字符。
在大多数情况下,额外的字符应该是字符集中的最后一个:''ufff-
但是,您可以自由决定什么是限制,尤其是在处理本地化时。
以免说你的索引中有以下值:
- A
- AB
- B
- BA
- BB
- C
要找到所有用"BA"表示的内容,您应该使用
var range = IDBKeyRange.bound("BA", "BA" + ''uffff');
默认情况下这是不可能的,但我为indexeddb编写的库支持它。请尝试linq2indexeddb。
indexeddb中也可以使用通配符进行搜索参见链接indexeddb模糊搜索
下面的通配符应该有效:var range=IDBKeyRange.bound("555","555"+'''ufff');
或者可以使用Linq2indexeddb库来利用like。
这里有一个多关键字索引示例供参考。如果您想在第二个键上排序,但只在第一个键上进行选择,这很有用。此外,仅供参考,如果需要,可以用与数组相同的方式定义主键。
const customerData = [
{ id: 1, sort: "888", name: "Bill", email: "bill@company.com" },
{ id: 2, sort: "111", name: "Donna", email: "donna1@home.org" },
{ id: 3, sort: "222", name: "Donna", email: "donna2@home.org" },
{ id: 4, sort: "999", name: "Andy", email: "andy@home.org" },
{ id: 5, sort: "444", name: "George", email: "george@home.org" },
{ id: 6, sort: "222", name: "Tim", email: "tim@home.org" },
{ id: 7, sort: "111", name: "Luke", email: "luke@home.org" }
];
const objectStore = db.createObjectStore("customers", { keyPath: "id" });
objectStore.createIndex("multiple", ["name","sort"], { unique: false });
const index = objectStore.index("multiple");
const boundRange = IDBKeyRange.bound(["Donna",""], ["Donna",""+''uffff']);
// for numeric columns use 0 instead of ""
//const boundRange = IDBKeyRange.bound(["Donna",0], ["Donna",0+''uffff']);
index.openCursor(boundRange, "prev").onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
console.error(`${cursor.key}, name: ${cursor.value.name}, sort: ${cursor.value.sort}, email: ${cursor.value.email}`);
cursor.continue();
}
};
- JavaScript中的通配符日期形式
- JavaScript上的通配符(也许这不费吹灰之力?)
- 带有通配符的姓氏Reg表达式
- javascript中通配符搜索的正则表达式
- Javascript:通配符正则表达式搜索
- 如何通过 jquery 通配符搜索数据属性的精确包含值
- 用于搜索的通配符表达式
- Indexeddb:使用通配符进行搜索
- 使用通配符在JS中搜索数组
- Javascript通配符regex搜索结果不一致
- 通过通配符字符串快速搜索数组
- 如何使用MySQL和PHP创建一个通配符搜索函数
- 在couchdb中的通配符搜索
- Select2 -搜索通配符匹配
- 在搜索字符串中包含通配符的正则表达式
- 如何在angularjs中使用通配符搜索
- 阵列搜索的Regex通配符
- MongoDB中的通配符搜索
- 搜索字符串中的通配符
- 通配符搜索(?, *)在字符串数组中使用javascript