IndexedDB - Dexie JS: динамически создавать магазины
Я работаю с indexedDB для локального хранения данных, с Dexie.js, который довольно удобен как обертка, особенно из-за сложных запросов. На самом деле, я хотел бы создать несколько хранилищ данных по сценариям, которые кажутся сложными.
Чтобы создать новый магазин, вы должны сделать что-то вроде:
db.version(2).stores({
Doctors: "++" + strFields
});
Если я сделаю что-то вроде Doctors = "Hospital", он все равно создаст магазин с именем "Doctors".
Есть ли способ сделать это?
Кто-нибудь сталкивался с такой же проблемой?
1 ответ
Допустим, вам нужны три магазина объектов: "Врачи", "Пациенты" и "Больницы", вы должны написать что-то вроде:
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));
});