6

我刚从 Dexie 开始,我似乎陷入了困境。

我有一个小型数据库(少于 1000 行),一旦我知道该行已发送到远程 API,我就会尝试逐一删除每一行。我还可以成功保存到表中(由 ID 和存储序列化对象的列定义)

这是我的代码:

if (online) {
    //we query the db and send each event
    database.open()
    let allEvents = database.events.toCollection()
    let total = allEvents.count(function (count) {
        console.log(count + ' events in total')
        //a simple test to ensure we're seeing the right number of records
    })
    allEvents.each(function(thisEvent){
        //push to remote API
        console.log('deleting ' + thisEvent.id)
        database.events.delete(thisEvent.id) //<= this doesn't seem to be working
    })
}

除了最后的 delete 语句之外,所有这一切。关于我应该如何解决这个问题的任何想法?对我来说重要的是逐行删除。

提前致谢!

4

3 回答 3

4

密钥的数据类型不是问题,您可以在我的示例中验证它:示例

db.example.where('key').equals('one').delete();  

也许您正试图通过一个不是索引的属性来删除。

希望能帮助到你!

于 2017-10-21T21:40:03.867 回答
4

我遇到了同样的问题,Eugenia Pais 的回答对我不起作用。所以经过一些测试,我发现问题出在变量的类型上:我使用的是字符串,但需要一个数字,所以我是这样解决的:

function removeRow (primaryKey) {
  primaryKey = parseInt(primaryKey);
  databaseName.tableName.where('primaryKey').equals(primaryKey).delete().then(function(deleteCount) {
    console.log ("Deleted " + deleteCount + " rows");
  }).catch(function(error) {
    console.error ("Error: " + error);
});

因此请注意,您使用的是数字作为参数。

于 2017-10-18T08:20:59.747 回答
2

删除每一行的正确方法应该是选择特定行并将其删除:

database.tableName.where(indexId).equals(indexValue).delete();

于 2017-10-09T19:03:14.917 回答