YDN DB Удалить запись по идентификатору (IndexedDB)
Я использую YDN DB для IndexedDB и хочу удалить запись из хранилища объектов, используя ее идентификатор. Вот моя схема:
var personsSchema = {
name: "persons",
keyPath: "id",
autoIncrement: true,
indexes: [{
name: "id",
unique: true
}, {
name: "firstname",
unique: false,
multiEntry: false
}, {
name: "lastname",
unique: false,
multiEntry: false
}]
};
schema = {
stores: [personsSchema]
};
var db = new ydn.db.Storage("xdb", schema);
Теперь у меня есть функция, которая удалит запись:
function deleteEntry(id){
var id = parseInt(id);
var objectStore = "persons";
var iterator = new ydn.db.ValueCursors(objectStore, "id", ydn.db.KeyRange.only(id));
var mode = "readwrite";
request = db.open(iterator, 1).then(function(cursor){
cursor.clear();
}, mode);
}
Эта функция дает мне эту ошибку:
Uncaught ydn.error.ArgumentException: Second argument must be cursor range iterator.
Спасибо за ответы.
1 ответ
Решение
Так должно быть:
function deleteEntry(id){
var id = parseInt(id);
var objectStore = "persons";
var iterator = new ydn.db.IndexValueCursors(objectStore, "id", ydn.db.KeyRange.only(id));
var mode = "readwrite";
request = db.open(function(cursor){
cursor.clear();
}, iterator, mode).then(function() {
console.log('cleared')
});
}
Но с тех пор id
является первичным ключом, вам не нужно индексироваться, это должно быть просто:
function deleteEntry(id){
var id = parseInt(id, 10);
var keys = db.remove("persons", id);
}
Если id не является первичным ключом, этот следующий код выполняется немного более эффективно, так как он не возвращает значения записи без необходимости.
function deleteEntry(id){
var id = parseInt(id);
var objectStore = "persons";
db.keys(objectStore, "id", ydn.db.KeyRange.only(id)).done(function(keys) {
db.remove(objectStore, keys);
};
}
Я исправил пример API.