如何在Firestore中更新数组内的对象?
如何在Firestore中更新数组内的对象?
我想更新Firestore中数组中一个对象的completed
属性,但是我不知道如何找到数组中的特定元素。图片显示了结构。
我已经做到了这一步,但不知道如何选择数组中的特定元素,例如item 1。我想使用它的ID(它有一个id属性),但是不知道如何到达那里。
const businessRef = db.collection('approvedBusinesses').doc(businessId) try { businessRef.update({ [`bookings.${currentDate} ????? `]: true // currentDate之后添加什么? })
顺便说一下,这是创建数组的方式(以及将其他对象推送到数组中的方式)
const bookingObj = { carro: 'PASSA_CARRO', completed: false, userId: userObject.uid, } businessRef.update({ [`bookings.${currentDate}`]: firebase.firestore.FieldValue.arrayUnion(bookingObj), })
问题的原因是Firestore没有提供直接更新数组中某个元素的操作。要更新数组中的元素,需要执行以下步骤:
1. 将整个文档读取到应用程序中。
2. 在应用程序代码中修改数组中的元素。
3. 将整个数组重新写回文档。
解决方法可以参考以下示例:
// 1. Read the document const docRef = db.collection('yourCollection').doc('yourDocument'); docRef.get().then((doc) => { if (doc.exists) { // 2. Modify the item in the array const data = doc.data(); data.yourArray[index] = newValue; // 3. Write back the entire array docRef.update({ yourArray: data.yourArray }); } });
这种方法可以更新数组中指定索引的元素。如果要更新多个元素,可以在应用程序中进行相应的修改。需要注意的是,这种方法会将整个数组读取到应用程序中,然后再写回文档,可能会导致读写的开销较大。
除了这种方法外,还可以考虑将数组存储在子集合中,这样可以解决“三步问题”,并且可以进行查询操作。但是需要注意的是,这种方法需要读写更多的文档,可能会增加开销。
在问题描述中还提到了一些相关的问题,可以参考这些问题来获取更多关于更新数组的方法。