2***@qq.com
2***@qq.com
  • 发布:2023-05-22 13:32
  • 更新:2023-05-22 17:13
  • 阅读:389

【报Bug】【严重严重影响使用】unicloud更新对象类型的字段时,子字段不会生效

分类:uniCloud

产品分类: uniCloud/App

示例代码:

同上

操作步骤:

在jql调试控制台测试如下:
创建测试数据库

{  
    "bsonType": "object",  
    "required": [],  
    "permission": {  
        "read": true,  
        "create": true,  
        "update": true,  
        "delete": true  
    },  
    "properties": {  
        "_id": {  
            "description": "ID,系统自动生成"  
        },  
        "a": {  
            "bsonType": "int",  
            "description": "a",  
            "defaultValue": 0  
        },  
        "b": {  
            "bsonType": "object",  
            "description": "b"  
        }  
    }  
}

添加原始数据

db.collection("aaa").add({  
    a: 1,  
    b: {  
        "x": {  
            "m": 1  
        }  
    }  
});

测试更新

db.collection("aaa").where({  
    a: 1  
}).update({  
    a: 2,  
    b: {  
        "x": {}  
    }  
});

结果:字段b更新不生效

预期结果:

更新后数据库应为如下:

{  
    a: 2,  
    b: {  
        "x": {}  
    }  
}

实际结果:

子字段更新不生效,如下:

{  
    a: 2,  
    b: {  
        "x": {  
            "m": 1  
        }  
    }  
}

bug描述:

uniCloud更新时不能删掉对象字段的子字段。
如:原数据结构如下

{"a":1,"b":{"x":{"m":1}}}

新提交数据如下:

{"a":2,"b":{"x":{}}}

其中b字段 是 object 类型
结果:更新提交后不生效
b对象字段的子字段x中还是存在 "m":1
注意:网页版uniCloud后台管理界面可以生效、但使用在云函数或jql调试控制台 用 updateupdateAndReturn都不生效

2023-05-22 13:32 负责人:无 分享
已邀请:
DCloud_uniCloud_VK

DCloud_uniCloud_VK

这不是bug, 如果你需要将

{"a":1,"b":{"x":{"m":1}}}

修改成

{"a":2,"b":{"x":{}}}

你的数据库修改语句需要这样写

const _ = db.command;  
await db.collection("aaa").where({    
    a: 1    
}).update({    
    a: 2,    
    b: {    
        "x": _.set({})     
    }    
});

即需要用 _.set() 命令

DCloud_uniCloud_VK

DCloud_uniCloud_VK

set的作用是将x对象字段全量覆盖
而不用set时的表现是: 部分修改的意思(即你传了哪个子字段,就修改那个子字段,你传{}等于传了空对象,代码没有字段,故表现就是不修改)

  • 2***@qq.com (作者)

    哦好的,谢谢。

    2023-05-22 20:04

要回复问题请先登录注册