Javascript 数组键路径上的索引不';我找不到任何值
我想熟悉indexedDB来构建我的Firefox WebExtension 我的示例数据的结构如下:Javascript 数组键路径上的索引不';我找不到任何值,javascript,indexeddb,firefox-addon-webextensions,Javascript,Indexeddb,Firefox Addon Webextensions,我想熟悉indexedDB来构建我的Firefox WebExtension 我的示例数据的结构如下: const sampleDataRaw = [ { "ent_seq" : 1413190, "att1" : [ { "sub11" : "content1", "sub12" : [ "word" ] }, { "sub11" : "content2" } ], "at
const sampleDataRaw = [
{
"ent_seq" : 1413190,
"att1" : [ {
"sub11" : "content1",
"sub12" : [ "word" ]
}, {
"sub11" : "content2"
} ],
"att2" : [ {
"sub21" : "other content",
"sub22" : [ "term" ]
} ]
}, {
"ent_seq" : 1000010,
"att2" : [ {
"sub21" : "more content"
}, {
"sub22" : "more words"
} ]
}
] // end sampleRawData
我已经打开/创建了我的数据库,添加了这个示例数据,并使用objectStore.get()和objectStore.openCursor()通过entseq键查询它
当我想使用我应该为这些字段创建的索引来搜索sub11或sub21字段时,问题就出现了,如下所示:
objectStore.createIndex("sub11Elements", "att1.sub11", { unique: false });
objectStore.createIndex("sub21Elements", "att2.sub21", { unique: false });
当我想要搜索时,比如说,字段sub11,如下所示:
var index = objectStore.index("sub11Elements");
index.get("content1").onsuccess = function(event) {
// I should have the first object of my data now, alas the result is undefined instead
};
它确实成功了,但是返回的值没有定义,因为get()实际上没有找到任何东西
我想知道它为什么找不到条目,以及如何让它找到条目。我想这可能是因为keypath错误,但是如上所述,如果我改为按键(entu seq)搜索,我可以成功地得到结果。att1[I]。sub11值
在mozilla的网站上,有一个声明,密钥可以是字符串和数组(或者数组中的数组等)类型,并且密钥路径部分应该用点连接起来。
通过在stackexchange上搜索,到目前为止,我发现密钥路径中不可能有可变密钥,但无论如何,这里不应该是这种情况。因此,我真的不知道是什么原因导致搜索无法在数据库中找到对象
访问器访问子属性,而不是数组的索引IDBObjectStore.prototype.get
在没有错误时总是产生成功,并且不指示是否找到匹配项关于第1点,再多说一点。看看
“att1”:[{“sub11”:“content1”,“sub12”:[“word”]}…
。假设这是一个实际的基本JavaScript对象。你能使用att1.sub11
吗?不。因为att1
的值是一个数组,而不是一个对象。我认为objectStore.createIndex(“sub11Elements”,“att1.sub11”,{unique:false})
是指att1
是数组而不是对象。请尝试使用att1[0]。sub11