我正在进行一个flutter项目,我使用Firebase Firestore作为我的数据库。目前,我在使用云功能时遇到了问题。这个函数应该更新数据库中的嵌套对象。
结构如下:
{
"plannings" : {
"0" : {
"finalSchedule": null,
"teacherName": "----",
"endDate": "8-11-2020",
"learnerAvailabilities": {
"3vLYq8Zlm6Z2KkGDbdu3rwQWMTd2": null,
"DTtN4j1fngfjZM3p8v5JVyc7hrn2": null,
"ekzj2Iy8JngtourPvHQyQAHJx563": null,
"Ss9QV7qFVvXBzTe3R6lmHkMBEWn1": null,
"tzEe2jhcr7hn1X1gu7c8BfuyO5a2": null,
"otlqIURWB5SZeChzhoaQOmNEi6m2": null,
},
"name": "----",
"id": "#5a066",
}
},
"Learners" : {},
"etc..." : {},
}
我希望能够单独更新每个"学习者可用性"(ID(的值。所以我尝试了这个:
school.update({
[`plannings.${key}.learnerAvailabilities.${userUID}`]: newSchoolUserAvailabilityObject,
});
但当我这样做时,除了更改的ID外,所有ID都会被删除。并且";finalSchedule"teacherName"endDate"name"id";也不见了。所以当我改变";3vLYq8Zlm6Z2KkGDbdu3rwQWMTd2":
{
"plannings" : {
"0" : {
"learnerAvailabilities": {
"3vLYq8Zlm6Z2KkGDbdu3rwQWMTd2": (new value),
},
}
},
"Learners" : {},
"etc..." : {},
}
我也不能仅仅取代";plannings";对象,因为当两个更新(.update(几乎同时发生时会引起麻烦。
问题是"plannings";字段最初是一个数组,但后来您将其更新为映射。Firestore不提供按索引更新数组项的方法。如果要修改数组项,必须读取整个文档,修改内存中的数组,然后用数组的新内容更新文档。