gpt4 book ai didi

javascript - 使用较短的数组查询 IndexedDB 复合索引

转载 作者:行者123 更新时间:2023-11-30 12:35:28 25 4
gpt4 key购买 nike

IndexedDB 允许您在多个属性上创建索引。就像如果你有像 {a: 0, b: 0} 这样的对象,你可以在 ab 上建立索引。

复合索引的行为是pretty weird ,但显然应该可以使用比复合索引短的数组进行查询。所以在我的示例中,我应该能够查询类似 [0] 的内容并获得 a==0 的结果。

但我似乎无法让它发挥作用。这是一个例子 you can run on JS Bin :

var db;

request = indexedDB.open("test", 1);
request.onerror = function (event) { console.log(event); };

request.onupgradeneeded = function (event) {
var db = event.target.result;
db.onerror = function (event) { console.log(event); };

var store = db.createObjectStore("store", {keyPath: "id", autoIncrement: true});
store.createIndex("a, b", ["a", "b"], {unique: true});

store.add({a: 0, b: 0});
store.add({a: 0, b: 1});
store.add({a: 1, b: 0});
store.add({a: 1, b: 1});
};

request.onsuccess = function (event) {
db = request.result;
db.onerror = function (event) { console.log(event); };

console.log("Only [0, 0]");
db.transaction("store").objectStore("store").index("a, b").openCursor(IDBKeyRange.only([0, 0])).onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
console.log(cursor.value);
cursor.continue();
} else {
console.log("Any [0, x]");
db.transaction("store").objectStore("store").index("a, b").openCursor(IDBKeyRange.only([0])).onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
console.log(cursor.value);
cursor.continue();
}
};
}
};
};

Here is the JS Bin link again.

我看到的输出是:

Only [0, 0]
Object {a: 0, b: 0, id: 1}
Any [0, x]

但我希望看到:

Only [0, 0]
Object {a: 0, b: 0, id: 1}
Any [0, x]
Object {a: 0, b: 0, id: 1}
Object {a: 0, b: 1, id: 2}

我哪里错了?

最佳答案

Kyaw Tun 回答的一个稍微更一般的版本:如果已知所有键都是具有两个非数组元素的数组,并且您想要匹配 [x, <any>] 的键。 , 使用 IDBKeyRange.bound([x], [x, []]) .

关于javascript - 使用较短的数组查询 IndexedDB 复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26203075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com