uni-app clientdb 按照官方文档操作无法update更新数组

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app clientdb 按照官方文档操作无法update更新数组
云数据库查询该表中的该条数据没问题,但按文档方法用clientdb更新combinations字段,就显示数据库验证失败,[“combinations”]类型无效,文档方法简而言之就是把数组下标作为key,用这种方法测试了各种类型的数组数据,都提示类型无效,求解!

```javascript db.collection(‘product’)
.where("_id==‘614966ad615be900011948bd’")
.update({
combinations: {
0: {
sold_num:“55”,
}
}
}) ```


5 回复

试一下!行不行
在0,加个方括号 [ 0 ]


我也遇到同样问题,加[0]也不行,验证也检查过是array

我也是按照官网文档做的,毛用没有。官方也没人出来回答,是不是要倒闭了

我也一样问题: 数据是这样的:
_id:“677cdc5f6cf195302132ebcd” fav:[“画画”,“游泳”,“排球”]
代码是这样的: let res = await db.collection(“users”)
.doc(
‘677cdc5f6cf195302132ebcd’
)
.update({
fav:{ 0 : ‘足球’}
}) 返回结果是这样: 返回结果: {“updated”:0}
执行成功,返回未更新,应该是不认这样的表达方式,但就不知道新表达方式是什么,神神秘秘的。

在uni-app中使用ClientDB进行本地数据库操作时,如果遇到无法更新数组的问题,通常是因为数组数据的更新方式在ClientDB中有一些特定的处理要求。ClientDB是一个轻量级的嵌入式数据库,对于复杂数据结构的操作(如数组)需要遵循一定的规范。

以下是一个示例代码,演示如何在uni-app中使用ClientDB正确地更新数组数据。假设我们有一个名为tasks的表,其中包含一个steps字段,该字段存储的是一个数组。

1. 创建表结构

首先,确保你的数据库中有一个包含数组的表结构:

const db = uni.getDatabase();
db.createObjectStore({
    keyPath: 'id',
    onSuccess: function () {
        console.log('Table created');
    },
    onError: function (e) {
        console.error('Failed to create table', e);
    },
    storeName: 'tasks',
    indexes: [{ name: 'name', keyPath: 'name' }],
    data: [{
        id: 1,
        name: 'Task 1',
        steps: ['Step 1', 'Step 2']
    }]
});

2. 更新数组数据

要更新数组数据,你需要先读取数据,修改数组,然后重新保存整个对象。ClientDB不支持直接对数组字段进行部分更新。

function updateTaskSteps(taskId, newSteps) {
    db.transaction('rw', ['tasks'], function () {
        const objectStore = this.objectStore('tasks');
        const getRequest = objectStore.get(taskId);

        getRequest.onsuccess = function (event) {
            const task = event.target.result;
            if (task) {
                task.steps = newSteps; // 更新数组
                const putRequest = objectStore.put(task);
                putRequest.onsuccess = function () {
                    console.log('Steps updated successfully');
                };
                putRequest.onerror = function (e) {
                    console.error('Failed to update steps', e);
                };
            } else {
                console.error('Task not found');
            }
        };

        getRequest.onerror = function (e) {
            console.error('Failed to get task', e);
        };
    });
}

// 调用函数更新步骤
updateTaskSteps(1, ['New Step 1', 'New Step 2', 'New Step 3']);

在这个示例中,我们首先通过事务读取指定ID的任务对象,然后修改其steps数组,最后使用put方法将更新后的对象保存回数据库。

这种方法确保了数组数据的完整性和一致性,是处理ClientDB中数组更新的标准方式。如果你的操作仍然遇到问题,请检查数据库操作的异步性,确保在读取和写入操作之间正确处理了数据。

回到顶部