Skip to content

WriteableCollection.delete()

qroft edited this page Jun 12, 2016 · 29 revisions

Deletes all objects in the query.

Syntax

collection.delete()

Return Value

Promise where result is the Number of deleted records.

Error Handling

If any object fails to be deleted or an exception occur in a callback function, entire operation will fail and transaction will be aborted.

If you catch the returned Promise, transaction will not abort, and you recieve a Dexie.MultiModifyError error object containing the following properties:

failures Array of Error objects of all errors that have occurred
failedKeys Array of the keys of the failed deletions. This array will have the same order as failures so that failures[i] will always represent the failure of failedKeys[i]
successCount Number of successful deletions made.

If you do NOT catch the returned Promise, and an error occur, the transaction will be aborted.

If you want to log the error but still abort the transaction, you must encapsulate the operation in a transaction() block and catch the transaction instead. It is also possible to catch the operation and call transaction.abort() in the catch() clause.

Sample

db.orders
    .where("state").anyOf("finished", "discarded")
    .or("date").below("2014-02-01")
    .delete()
    .then(function (deleteCount) {
        console.log( "Deleted " + deleteCount + " objects");
    });

With yield (Supported since 2015 by Chrome, Firefox, Opera and Edge):

db.transaction('rw', db.orders, function* () {
    var deleteCount = yield db.orders
        .where("state").anyOf("finished", "discarded")
        .or("date").below("2014-02-01")
        .delete();

    console.log ("Successfully deleted " + deleteCount + " items");

}).catch (e => {
    console.error (e);
});

With Typescript

async function myDeleteFunction () {
    let deleteCount = await db.orders
        .where("state").anyOf("finished", "discarded")
        .or("date").below("2014-02-01")
        .delete();
}

Remarks

WriteableCollection.delete() is equivalent to:

WriteableCollection.modify(function () {delete this.value;});

..but since version 1.3.6, WriteableCollection.delete() is much faster whan deleting using WritebaleCollection.modify().

Clone this wiki locally