IndexedDB - Dexie JS:动态创建商店

时间:2014-11-18 13:42:53

标签: javascript indexeddb dexie

我正在使用indexedDB进行本地数据存储,使用Dexie.js作为包装器非常好,特别是因为高级查询。 实际上,我想通过脚本创建几个数据存储区,这看起来很复杂。

要创建新商店,您可以执行以下操作:

db.version(2).stores({
    Doctors: "++" + strFields
});

如果我做了像Doctors =“Hospital”这样的事情,它仍会创建一个名为“Doctors”的商店。

有办法做到这一点吗?

有人遇到过同样的问题吗?

1 个答案:

答案 0 :(得分:6)

假设你想要三个对象商店“医生”,“病人”和“医院”,你会写下这样的东西:

var db = new Dexie ("your-database-name");
db.version(1).stores({
    Doctors: "++id,name",
    Patients: "ssn",
    Hospitals: "++id,city"
});
db.open();

请注意,您只需指定主键和所需索引。主键可以选择自动递增(“++”前缀)。您可以根据需要向对象添加任意数量的属性,而无需在索引列表中指定每个属性。

db.Doctors.add({name: "Phil", shoeSize: 83});
db.Patients.add({ssn: "721-07-446", name: "Randle Patrick McMurphy"});
db.Hospitals.add({name: "Johns Hopkins Hospital", city: "Baltimore"});

查询不同的商店:

db.Doctors.where('name').startsWithIgnoreCase("ph").each(function (doctor) {
    alert ("Found doctor: " + doctor.name);
});

db.Hospitals.where('city').anyOf("Baltimore", "NYC").toArray(function (hospitals) {
   alert ("Found hospitals: " + JSON.stringify(hospitals, null, 4));
});