夏夜追凉丶
夏夜追凉丶
  • 发布:2023-11-23 22:56
  • 更新:2023-11-24 14:44
  • 阅读:241

【报Bug】url化的云对象,在进行update时,对一个字段进行赋值空对象重置,会无法将数据库中该字段变成空对象

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

url化的云对象,在进行update时,对一个字段进行赋值空对象重置,会无法将数据库中该字段变成空对象。我再对user表的avatar_file字段进行update时,因为需要对头像进行置空,就将avatar_file={}进行update,结果发现数据库中该字段没有发生变化,必须将avatar_file={ extname: '', name: '', url: '' }发送至数据库进行update,才会将数据库中的avatar_file字段变成{ extname: '', name: '', url: '' }。然后我试着只将将avatar_file字段中某一属性例如url置空,就像这样avatar_file={ url: '' }进行update,结果发现数据库中的avatar_file字段变成{ extname: '没变化还是原来的', name: '没变化还是原来的'', url: '' },就只将数据库中的avatar_file字段中的url置空了,其他属性都没变。按理说应该将数据库中的avatar_file字段update成我传入的avatar_file一样才对,我传入空对象就变成空对象,而不是像Object.assign那样覆盖,现在的感觉就是和Object.assign覆盖一样。

预期结果:

按理说应该将数据库中的avatar_file字段update成我传入的avatar_file一样才对,我传入空对象就变成空对象

实际结果:

我试着只将将avatar_file字段中某一属性例如url置空,就像这样avatar_file={ url: '' }进行update,结果发现数据库中的avatar_file字段变成{ extname: '没变化还是原来的', name: '没变化还是原来的'', url: '' },就只将数据库中的avatar_file字段中的url置空了,其他属性都没变,感觉就是和Object.assign覆盖一样。

bug描述:

url化的云对象,在进行update时,对一个字段进行赋值空对象重置,会无法将数据库中该字段变成空对象。我再对user表的avatar_file字段进行update时,因为需要对头像进行置空,就将avatar_file={}进行update,结果发现数据库中该字段没有发生变化,必须将avatar_file={ extname: '', name: '', url: '' }发送至数据库进行update,才会将数据库中的avatar_file字段变成{ extname: '', name: '', url: '' }。然后我试着只将将avatar_file字段中某一属性例如url置空,就像这样avatar_file={ url: '' }进行update,结果发现数据库中的avatar_file字段变成{ extname: '没变化还是原来的', name: '没变化还是原来的'', url: '' },就只将数据库中的avatar_file字段中的url置空了,其他属性都没变。按理说应该将数据库中的avatar_file字段update成我传入的avatar_file一样才对,我传入空对象就变成空对象,而不是像Object.assign那样覆盖,现在的感觉就是和Object.assign覆盖一样。

2023-11-23 22:56 负责人:无 分享
已邀请:
DCloud_uniCloud_VK

DCloud_uniCloud_VK

这个不是bug,update的逻辑就是这样的, 如果你想要覆盖对象就要用到 set 操作符

const _ = db.command  
let res = await db.collection('photo').doc('doc-id').update({  
  obj: _.set({  
    a: 1  
  })  
})

上面代码中

obj: _.set({  
    a: 1  
  })

的作用就是覆盖obj字段为 {a:1}

而如果不使用 _.set

let res = await db.collection('photo').doc('doc-id').update({  
  obj: {  
    a: 1  
  }  
})

上面的代码效果是修改obj字段的子字段a为1

要回复问题请先登录注册