如何只修改 dexie 商店中的一个属性而不删除其余部分?
Posted
技术标签:
【中文标题】如何只修改 dexie 商店中的一个属性而不删除其余部分?【英文标题】:How to modify just a property from a dexie store without deleting the rest? 【发布时间】:2021-08-22 14:16:43 【问题描述】:我在下面的打印屏幕中显示了 dexie 商店:
Dexie stores print screen
我的目标是在不丢失其余数据的情况下从商店更新 dexie 字段行。
例如:当我从第二行(key=2)编辑并保存字段“com_name”时,我只想更新“com_name”而不丢失其余属性,请参见第一行和第三行.
我已经尝试使用 collection.modify 和 table.update,但在使用以下代码时都删除了其余属性:
dexieDB.table('company').where('dexieKey').equals('1')
//USING table.update
//.update(dexieRecord.dexiekey,
// company:
// com_name: "TOP SERVE 2"
//
//)
.modify(
company:
com_name: TOP SERVE 2
)
.then(function (updated)
if (updated)
console.log("Success.");
else
console.log("Nothing was updated.");
)
.catch(function (err) console.log(err); );
知道我该怎么做吗?
谢谢 亚历克斯
【问题讨论】:
【参考方案1】:鉴于 JSON 数据,我明白出了什么问题。
而不是将以下内容传递给 update():
company:
com_name: "TOP SERVE 2"
你可能想通过这个:
"company.com_name": "TOP SERVE 2"
另一个提示是在 rw 事务中进行添加,如果您可以使用 bulkAdd() 来优化性能,效果会更好。
【讨论】:
修改的三个文档(也适用于更新)举例说明了如何更新嵌套属性。 dexie.org/docs/Collection/…【参考方案2】:既然你说我意识到公司和联系人存储是动态创建的,并且editedRecords 存储具有明确声明的索引,因此在更新公司或联系人存储时,因为 dexie 看不到索引将被覆盖。我尚未对其进行测试,但我怀疑这是行为。
请参阅下面的打印屏幕:
Dexie stores overview
基本上我有来自 db 的 json 原始数据,在浏览器中我创建商店并基于它存储数据,请参见下面的代码:
function createDexieTables(jsonData) //jsonData - array, is the json from db
const stores = ;
const editedRecordsTable = 'editedRecords';
jsonData.forEach((jsonPackage) =>
for (table in jsonPackage)
if (_.find(dexieDB.tables, 'name': table ) == undefined)
stores[table] = 'dexieKey';
);
stores[editedRecordsTable] = 'dexieKey, table';
addDataToDexie(stores, jsonData);
function addDataToDexie(stores, jsonData)
dbv1 = dexieDB.version(1);
if (jsonData.length > 0)
dbv1.stores(stores);
jsonData.forEach((jsonPackage) =>
for (table in jsonPackage)
jsonPackage[table].forEach((tableRow) =>
dexieDB.table(table).add(tableRow)
.then(function ()
console.log(tableRow, ' added to dexie db.');
)
.catch(function ()
console.log(tableRow, ' already exists.');
);
);
);
这是json,我把它转成object,保存到dexie的value列,key是“dexieKey”:
[
"company": [
"dexieKey": "1",
"company":
"com_pk": 1,
"com_name": "CloudFire",
"com_city": "Round Rock",
"serverLastEdit": [
"com_pk": "2021-06-02T11:30:24.774Z"
,
"com_name": "2021-06-02T11:30:24.774Z"
,
"com_city": "2021-06-02T11:30:24.774Z"
],
"userLastEdit": []
]
]
知道为什么动态生成索引时没有填充索引吗?
【讨论】:
【参考方案3】:您有权使用 Table.update 或 Collection.modify。他们不应该删除指定属性以外的其他属性。您能否粘贴一个 jsitor.com 或 jsfiddle 复制品,有人可以帮助您查明代码无法按预期工作的原因。
【讨论】:
见我上面的评论。以上是关于如何只修改 dexie 商店中的一个属性而不删除其余部分?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Zsh 中的 $PATH 中删除路径并将其添加到开头而不重复?
删除包含外键的字段,而不删除该字段包含LARAVEL的所有项目