5***@qq.com
5***@qq.com
  • 发布:2021-12-15 11:06
  • 更新:2024-07-18 13:19
  • 阅读:776

【报Bug】云数据库file类型的字段设置为null后,无法更新覆盖

分类:uniCloud

产品分类: uniCloud/腾讯云

示例代码:

以下为schama
{
"bsonType": "object",
"permission": {
"create": "'album_course_manage' in auth.permission",
"delete": "'album_course_manage' in auth.permission",
"read": true,
"update": "'album_course_manage' in auth.permission"
},
"required": [
"name",
"media_file",
"album_ids"
],
"properties": {
"_id": {
"description": "存储文档 ID(商品 ID),系统自动生成"
},
"name": {
"bsonType": "string",
"description": "课程名称",
"title": "课程名称",
"trim": "both"
},
"desc": {
"bsonType": "string",
"description": "课程描述",
"title": "课程描述",
"trim": "both"
},
"course_length": {
"bsonType": "string",
"description": "课程时长",
"title": "课程时长",
"trim": "both"
},
"course_length_seconds": {
"bsonType": "int",
"description": "课程时长-秒",
"title": "课程时长-秒",
"defaultValue": 0
},
"play_times": {
"bsonType": "int",
"description": "播放次数",
"title": "播放次数",
"defaultValue": 0
},
"album_ids": {
"bsonType": "array",
"description": "所属专辑id列表",
"title": "所属专辑",
"foreignKey": "lz-album._id",
"enum": {
"collection": "lz-album",
"field": "_id as value, name as text"
}
},
"media_file": {
"bsonType": "file",
"description": "课程文件",
"title": "课程文件",
"permission": {
"read": "'appGetCourse' in action || 'album_course_manage' in auth.permission"
}
},
"video_file": {
"bsonType": "file",
"description": "课程视频文件",
"title": "课程视频文件",
"permission": {
"read": "'appGetCourse' in action || 'album_course_manage' in auth.permission"
}
},
"add_date": {
"bsonType": "timestamp",
"defaultValue": {
"$env": "now"
},
"description": "上架时间"
},
"enable": {
"bsonType": "bool",
"description": "是否上架销售",
"title": "启用",
"defaultValue": false
},
"free": {
"bsonType": "bool",
"description": "是否为免费试听",
"title": "免费试听",
"defaultValue": false
},
"order": {
"bsonType": "int",
"title": "显示排序",
"description": "排序",
"defaultValue": 0
}
}

}

云数据库有这样一条记录,这条数据初始添加的时候,其中video_file为可选,初始设置为null

{
"add_date": 1639536264900,
"album_ids": [
"859059a56197ae9a06da8c1d06cbc14d"
],
"course_length": "00:00",
"course_length_seconds": 0,
"enable": true,
"free": false,
"media_file": {
"extname": "mp3",
"fileID": "cloud://tcb-qityvfnccrppizja0c5a4-594724.7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812/1639536261289_0.mp3",
"name": "好妹妹 - 不说再见.mp3",
"path": "https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639536261289_0.mp3",
"size": 11967457,
"url": "https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639536261289_0.mp3"
},
"name": "好妹妹 - 不说再见",
"order": 2,
"play_times": 0,
"video_file": null
}

在前端调用update更新这条数据的时候,video_file字段通过file_picker选择了一个文件上传更新的时候,会报错导致这个字段无法更新
以下为提交的更新对象

{"name":"好妹妹 - 不说再见","media_file":{"extname":"mp3","name":"好妹妹 - 不说再见.mp3","path":"https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639536261289_0.mp3","size":11967457,"fileID":"cloud://tcb-qityvfnccrppizja0c5a4-594724.7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812/1639536261289_0.mp3","url":"https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639536261289_0.mp3"},"video_file":{"extname":"mp4","fileType":"video","name":"2.mp4","path":"https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639537441518_0.mp4","size":8417062,"fileID":"cloud://tcb-qityvfnccrppizja0c5a4-594724.7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812/1639537441518_0.mp4","url":"https://7463-tcb-qityvfnccrppizja0c5a4-594724-1308150812.tcb.qcloud.la/1639537441518_0.mp4"},"enable":true,"order":2,"course_length":"00:00","course_length_seconds":0,"play_times":0,"free":false,"album_ids":["859059a56197ae9a06da8c1d06cbc14d"]}

以下为报错信息
errCode: DATABASE_REQUEST_FAILED | errMsg: [FailedOperation] multiple write errors: [{write errors: [{Cannot create field 'extname' in element {video_file: null}}]}, {<nil>}]

操作步骤:

已在上面说明

预期结果:

可以正常更新覆盖null

实际结果:

报错无法更新这个字段

bug描述:

云数据库中类型为file的字段,添加记录后,初始设置为null以后,无法update

2021-12-15 11:06 负责人:DCloud_UNI_HT 分享
已邀请:

最佳回复

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

jql已调整为自动过滤file类型字段null数据

  • liu666

    2023.4.13问题还存在

    2023-04-13 11:33

  • DCloud_uniCloud_WYQ

    你怎么用的?上面说的调整试jql对bsonType: file类型字段做的处理。如果你没有使用jql注意自己对复杂类型过滤null值

    2023-04-13 16:48

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

问题已了解,建议将删除的文件更新为一个空对象

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

    空对象就是直接更新为{}吗,貌似也是不行

    2021-12-15 12:31

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

    上传空对象{}会提示类型不符

    2021-12-15 12:31

  • DCloud_uniCloud_WYQ

    回复 5***@qq.com: 看一下是前端校验的还是云端校验的

    2021-12-15 14:10

  • DCloud_uniCloud_WYQ

    回复 5***@qq.com: 把空对象改成{url:''}试试呢

    2021-12-15 16:30

  • 4***@qq.com

    回复 DCloud_uniCloud_WYQ: 这个问题最后是怎么解决的?我也遇到了这样的问题

    2022-06-12 22:45

  • 逍涯

    如云库手动更新为{}可以,但是前端默认值设置为{}的话,无法提交,验证的结果是类型不符

    2022-08-01 10:23

剑网PHP

剑网PHP

此问题仍然存在。
一个带图片的集合,第一次不传图,保存,
第二次去补这个图片就上传不了。
云端报的错误

逍涯

逍涯

我的情况和题主一模一样,百度一圈也找不到解决方案!
当前时间:20220728
问题仍然存在!
希望官方能解决一下!

z***@126.com

z***@126.com - 智联生活家CTO

遇到相同问题
今天是2023年3月1日
手动设置可以设置为{},但前端更新成{}会报类型错误,无法设置。
设置为null可以,但后期将无法覆盖更新。

  • z***@126.com

    目前我的解决办法,大家可参考:

    更新时设置为{url:''}是可以的,这样相当于图片删除了。


    单独设置一个变量存储v-model,比如 xxximg

    在调用该字段值的地方加判断,如果res.result.data[0].img.url为空,则认为图片不存在。

    如果不为空,则认为图片存在

    2023-03-01 11:05

  • liu666

    这种bug都不给修复一下,这么久了。哎

    2023-04-13 11:25

  • 1***@qq.com

    回复 z***@126.com: {url:''}也删除不了

    2024-07-18 22:20

1***@qq.com

1***@qq.com

同,问题还在 如果是 file 数组 会变成 [ null, { url:"" } ],一样报错

要回复问题请先登录注册