根据以下数据,我希望做一些类似“查找父对象名称为'Panel'的块1”
所以,我尝试设置这样的复合索引:
objStore.createIndex('by_name_and_block', ['Name', 'blocks.Name']);
然后像这样调用它(排序):
var index = objStore.index("by_name_and_block");
var request = index.get("Panel", "1");
// I've also tried:
// var request = index.get(["Panel","1"]);
...
但这不起作用。有没有办法在 indexeddb ?
中设置此复合索引示例数据:
[
{
Name: "Post",
blocks: [
{
Name:"1",
Arrays:[]
},
{
Name:"2",
Arrays:[]
},
]
},
{
Name: "Panel",
blocks: [
{
Name:"1",
Arrays:[]
},
{
Name:"2",
Arrays:[]
},
]
},
]
答案 0 :(得分:1)
您的数据无法使用当前规范进行索引。见steps for extracting key from keyPath。请注意,对象在数组键路径中不是有效键值。
在v2中,您将能够使用索引函数表达式。
目前,您必须在持久保存到数据库之前生成额外的变量,并在检索后将其删除。使用不带复合索引的multiEntry索引。
答案 1 :(得分:0)
这个脚本是你想要的吗?
var obj = [
{
Name: "Post",
blocks: [
{
Name:"1",
Arrays:[]
},
{
Name:"2",
Arrays:[]
},
]
},
{
Name: "Panel",
blocks: [
{
Name:"1",
Arrays:[]
},
{
Name:"2",
Arrays:[]
},
]
},
];
function getBlockByName(objName, index){
for(var i = 0; i < obj.length; i++){
if(obj[i].Name == objName)
return obj[i].blocks[index];
}
return false;
}
//Index starting from 0
console.log(getBlockByName("Panel", 1));
//Will return {Name:"2", Arrays:[]} object