ConstraintError: Key already exists in the object store

ConstraintError: Key already exists in the object store

我正在使用 React 16.3.2Redux 4Dexie 2.0.3.

当我要第二次存储数据时,它抛出此错误消息。

错误: ConstraintError: Key already exists in the object store.

   return dispatch => {
        db.table
        .add(data)
        .then (function(id){
            console.log(id)
        })
        .catch (function (error) {
            console.log("Error: " + error);
        });
    }

我的数据库架构:

   const db = new Dexie('ReactReduxDexieJsCRUD');
  db.version(1).stores({table:'++id,name,age,bloodGroup,donateBefore,weight' });

第一次保存日期很好,之后就报错了。

您的架构是什么样的? (部分 db.version(x).stores({...}) ?

最常见的是入站主键,例如:

db.version(1).stores({
  table: 'id, idx1, idx2...'
});

这里id是主键

  • db.table.add({id: 1, foo: 'bar'}) 将添加 ID 为 1 的对象。
  • db.table.add({id: 1, foo: 'bar2'})第二次失败,因为id 1存在
  • db.table.put({id: 1, foo: 'bar2'}) 将更新 ID 为 1 的对象。

那你到底想做什么?你说你想用新键添加新对象。如果是这样,我想错误是你第二次给了同样的钥匙。

你也可以让id由db生成

db.version(2).stores({
  table: '++id, idx1, idx2...'
});

那么你不需要在调用 add() 时提供 id:

  • db.table.add({foo: 'bar'}) 将添加 ID 为 1 的对象。
  • db.table.add({foo: 'barX'}) 第二次将添加 ID 为 2 的新对象
  • ...