微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何只修改 dexie 商店中的一个属性而不删除其余属性?

如何解决如何只修改 dexie 商店中的一个属性而不删除其余属性?

我在下面的打印屏幕中显示了 dexie 商店:

Dexie stores print screen

我的目标是在不丢失其余数据的情况下更新商店中的 dexie 字段行。

例如:当我编辑并保存第二行中的字段“com_name”(键={2})时,我只想更新“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); });

知道我怎样才能做到这一点吗?

谢谢 亚历克斯

解决方法

您有权使用 Table.update 或 Collection.modify。他们不应该删除指定属性之外的其他属性。你能粘贴一个 jsitor.com 或 jsfiddle 的 repro,有人可能会帮助你查明为什么代码没有按预期工作。

,

既然您说的是我意识到公司和联系人存储是动态创建的,并且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,我将其转换为对象并保存到值列中的dexie 和键si“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": []
        }
      }
    ]
  }
]

知道为什么动态生成索引时没有填充索引吗?

,

鉴于 JSON 数据,我明白出了什么问题。

而不是将以下内容传递给 update():

{
    company:
    {
        com_name: "TOP SERVE 2"
    }
 }

你可能想通过这个:

 {
    "company.com_name": "TOP SERVE 2"
 }

另一个提示是在 rw 事务中进行添加,或者如果您可以使用 bulkAdd() 来优化性能,效果会更好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。