在不知道模式的情况下简单地写入 Dexie
Simple write to Dexie without knowing the schema
是否可以在不知道架构的情况下将整个对象写入 Dexie?
我只想这样做:
var db = new Dexie(gameDataLocalStorageName);
db.version(1).stores({
myData: "gameData"
});
db.myData.put(gameData);
console.log(db.myData.get('gameData'));
但我收到以下错误:
Unhandled rejection: DataError: Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value.
DataError: Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value.
错误是因为您指定了使用入站键“gameData”的架构,即要求每个对象都将 属性“gameData”作为其主键。
如果您不需要对象中的主键,您可以将架构声明为 {myData: ""}
而不是 {myData: "gameData"}
。通过这样做,您将需要在调用 db.myData.put()
.
时提供与对象分开的主键
查看 inbound vs non-inbound keys and detailed schema syntax
的文档
var db = new Dexie(gameDataLocalStorageName);
db.version(1).stores({
myData: ""
});
Promise.resolve().then(async () => {
await db.myData.put(gameData, 'gameData'); // 'gameData' is key.
console.log(await db.myData.get('gameData'));
}).catch(console.error);
由于我们在这里更改了主键,因此您需要先在 devtools 中删除数据库,然后才能生效。
是否可以在不知道架构的情况下将整个对象写入 Dexie? 我只想这样做:
var db = new Dexie(gameDataLocalStorageName);
db.version(1).stores({
myData: "gameData"
});
db.myData.put(gameData);
console.log(db.myData.get('gameData'));
但我收到以下错误:
Unhandled rejection: DataError: Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value.
DataError: Failed to execute 'put' on 'IDBObjectStore': Evaluating the object store's key path did not yield a value.
错误是因为您指定了使用入站键“gameData”的架构,即要求每个对象都将 属性“gameData”作为其主键。
如果您不需要对象中的主键,您可以将架构声明为 {myData: ""}
而不是 {myData: "gameData"}
。通过这样做,您将需要在调用 db.myData.put()
.
查看 inbound vs non-inbound keys and detailed schema syntax
的文档var db = new Dexie(gameDataLocalStorageName);
db.version(1).stores({
myData: ""
});
Promise.resolve().then(async () => {
await db.myData.put(gameData, 'gameData'); // 'gameData' is key.
console.log(await db.myData.get('gameData'));
}).catch(console.error);
由于我们在这里更改了主键,因此您需要先在 devtools 中删除数据库,然后才能生效。