3

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

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

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

如果我执行 Doctors = "Hospital" 之类的操作,它仍然会创建名称为 "Doctors" 的商店。

有没有办法做到这一点?

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

4

1 回答 1

9

假设你想要三个对象存储“Doctors”、“Patients”和“Hospitals”,你可以这样写:

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));
});
于 2014-11-20T23:18:41.060 回答