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
- 更新:2023-11-24 14:44
- 阅读:241
产品分类: uniCloud/App
操作步骤:
预期结果:
按理说应该将数据库中的avatar_file字段update成我传入的avatar_file一样才对,我传入空对象就变成空对象
按理说应该将数据库中的avatar_file字段update成我传入的avatar_file一样才对,我传入空对象就变成空对象
实际结果:
我试着只将将avatar_file字段中某一属性例如url置空,就像这样avatar_file={ url: '' }进行update,结果发现数据库中的avatar_file字段变成{ extname: '没变化还是原来的', name: '没变化还是原来的'', url: '' },就只将数据库中的avatar_file字段中的url置空了,其他属性都没变,感觉就是和Object.assign覆盖一样。
我试着只将将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覆盖一样。




这个不是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