是否可以要求 Dexie 排除一个或多个 table 属性以保存在 IndexedDB 中?
Is it possible to ask Dexie to exclude one or more table properties to be saved in IndexedDB?
在商店中创建或在 indexeddb 中保存条目时,是否可以排除 table 的一个或多个属性?
例如以下 table 描述 (Typescript) 有四个属性,其中只有前三个用于创建和添加新条目:
interface IContact {
id?: number,
first: string,
last: string,
notInDb: string
}
属性 notInDb
在创建 table 或添加实例时都不应考虑。 notInDb
仅在实现接口的实际 class 中使用。
您不能 select 只存储对象的某些属性。我猜你想排除 属性 的原因是因为它太大或者不是 structured-cloneable.
indexedDB 使用 structured-cloning 算法只接受某些对象。这基本上是序列化,但不是字符串。所以,你需要设计自己的序列化方法。将所需的属性复制到基本对象中。这听起来像是开销,但实际上并没有那么糟糕。不要尝试存储 class 本身,而是创建一个 serialize
方法来创建一个基本对象并存储它。创建一个相应的 deserialize
方法,该方法接受一个基本对象,并从中创建一个 class.
的实例
我建议先尝试这种方法。如果您后来发现性能是个问题,并想继续使用 indexedDB,那么您可能需要重新考虑您的设计,并围绕 indexedDB 的要求进行设计。
Indexeddb 将只存储自己的可枚举属性。因此可以使用 Object.defineProperty() 并将其标记为 {enumerable: false}.
在商店中创建或在 indexeddb 中保存条目时,是否可以排除 table 的一个或多个属性?
例如以下 table 描述 (Typescript) 有四个属性,其中只有前三个用于创建和添加新条目:
interface IContact {
id?: number,
first: string,
last: string,
notInDb: string
}
属性 notInDb
在创建 table 或添加实例时都不应考虑。 notInDb
仅在实现接口的实际 class 中使用。
您不能 select 只存储对象的某些属性。我猜你想排除 属性 的原因是因为它太大或者不是 structured-cloneable.
indexedDB 使用 structured-cloning 算法只接受某些对象。这基本上是序列化,但不是字符串。所以,你需要设计自己的序列化方法。将所需的属性复制到基本对象中。这听起来像是开销,但实际上并没有那么糟糕。不要尝试存储 class 本身,而是创建一个 serialize
方法来创建一个基本对象并存储它。创建一个相应的 deserialize
方法,该方法接受一个基本对象,并从中创建一个 class.
我建议先尝试这种方法。如果您后来发现性能是个问题,并想继续使用 indexedDB,那么您可能需要重新考虑您的设计,并围绕 indexedDB 的要求进行设计。
Indexeddb 将只存储自己的可枚举属性。因此可以使用 Object.defineProperty() 并将其标记为 {enumerable: false}.