所以我正在做一個個人專案來學習 react-native 和 Firestore。
我有一個這樣的資料庫:

我希望我的代碼在陣列中添加一個新電池batteries。陣列中的元素只是一個map{string, string}
問題是,當我用一個有效的新品牌更新陣列時,但如果我想再次用同一個品牌更新它,那么最后就有了
batteries[0]: {'brand': 'cestmoi'}
batteries[1]: {'brand': 'cestmoi'}
資料庫沒有更新,沒有任何錯誤。
我不明白為什么,我跟著他們的教程。這是我的代碼:
async function addData(collection, doc, value) {
console.log(`Add data ${value.brand}`)
try {
const result = await firestore()
.collection(collection)
.doc(doc)
.set({
batteries: firestore.FieldValue.arrayUnion(value)
})
console.log(result);
return result;
} catch (error) {
return error;
}
}
我習慣性地使用try-catch,但我不知道它then...catch是否更好。
uj5u.com熱心網友回復:
arrayUnion 說它“將元素添加到陣列中,但只添加尚未存在的元素”。也許它會進行字串化或其他檢查相等性的操作,因此不會添加新元素。我認為您必須 1. 獲取當前串列,2. 添加您的元素,3. 將電池欄位設定為更新串列。
uj5u.com熱心網友回復:
正如@windowsill 在他的回答中提到的那樣,您無法使用客戶端代碼在陣列中添加重復元素。如果您的應用程式需要,那么您必須讀取整個陣列,添加重復項,然后將檔案寫回 Firestore。
但是,如果要更新物件陣列(映射)中的現有元素,則必須使用arrayUnion整個物件。如果您想更好地了解該機制,可以閱讀以下文章,該文章稱為:
- 如何更新 Firestore 中的物件陣列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/406775.html
標籤:
