ConstraintError:密钥已存在于对象库中

时间:2018-05-17 18:25:17

标签: javascript redux indexeddb dexie

我正在使用 React 16.3.2 Redux 4 Dexie 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);
        });
    }

我的Db架构:

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

第一次存储日期很好但是在它发出错误之后。

1 个答案:

答案 0 :(得分:1)

您的架构如何? (部分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的对象。

那你真的想做什么?你说你想用新密钥添加新对象。如果是这样,我认为错误是您第二次给出相同的密钥。

您也可以让db生成id

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

然后你不需要在调用add()时提供id:

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