假设在User集合中有如下一个记录:
{"arrayA": [
{ "name": "A", subObjA:{ } },
{ "name": "B", subObjB:{ } }
]
}
db.collection('User').where({
xx: xxx
}).update({
data:{
//1. 删除arrayA内第一个元素内的subObjA对象。这个能成功删除(即:Object内的Object是可以成功删除的)。
'arrayA': { [0]: { subObjA: _.remove() }},
//2. 删除arrayA内第二个元素。这个无法完全删除,arrayA[1]会变为null(即:数组内的Object无法完全删除,Object变为null)。
'arrayA': { [1]: _.remove() }
}
});
综上所述:无法正确删除数组内的对象。
问题回顾:在以前是在云开发数据库面板手动删除数组内的对象,这个对象变为null,无法完全删除。现在是通过代码删除数组内的对象,这个对象变为null,无法完全删除。
_.remove() 类似 MongoDB 的 unset(参考:https://docs.mongodb.com/manual/reference/operator/update/unset/index.html#behavior):
如果作用的是对象,那么会直接删除
如果是数组,那么会置为 null,这样不会改变数组自身的长度和后面元素的索引
如果想要从数组中删除某个符合条件的元素,那么可以使用 pullAll,具体可以看文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/database/command.pullAll.html