![](/img/trans.png)
[英]I can display data from a firestore collection, but cannot access the array elements
[英]How can I push elements to array in firestore document collection?
我有個問題。 我需要在外賣網站上創建籃子功能。 我想要的是映射籃子項目,然后如果同一家餐廳有兩個項目將它們推送到 firestore 中的指定餐廳,並將它們作為一個對象添加到“訂單”集合中。
讓我們說:
basket: [
{id: 0, restaurantId: 0, price: 10, name: bla bla},
{id: 1, restaurantId: 0, price: 99, name: hoho},
{id: 2, restaurantId: 15, price: 2, name: DIFFERENT RESTAURANT}
]
現在我創建了類似的東西,但它並沒有真正起作用,它將項目“推送”到“訂單”集合中的指定餐廳,但它只發生一次,因此如果存在具有相同用戶的對象,它不會推送另一個而是更新這個已經存在的。
basket.map(el => {
restaurantRef.doc(el.restaurantId).update({
[`orders.${user.id}.products`]: firebase.firestore.FieldValue.arrayUnion(el),
[`orders.${user.id}.details`]: {
name: user.name,
status: "waiting",
address: {
city: "New York",
...
}
}
})
})
user.id來自存儲當前用戶的對象。
所以我想要做的是將對象推送到內部嵌套數組的“訂單”集合(/restaurants/ restaurantId /orders)。
這應該是這樣的:
orders:{
userId: {
products: [{}, {}, {}],
details: {}
},
anotherUserId: {
products: [{}, {}, {}],
details: {}
},
userId: {
products: [{}, {}, {}],
details: {}
},
}
一位用戶訂購了兩次,因為他可能在幾天前和今天訂購了一些東西,這就是它應該的樣子。
我不知道我是否正確解釋了這一點並錯過了您需要幫助我的東西。
提前致謝,感謝您的時間。
問題可能是arrayUnion
只添加了唯一值。 這可能是一個問題,因為您正在推送對象,我不確定 Firestore 是否會檢查對象的內容以查看它們是否唯一。 也許嘗試set.(PATCH_OBJECT_HERE, { merge: true})
代替。
此外,對於您正在嘗試做的事情,也許更好的解決方案(關於數據庫性能)是按 restaurantId 將籃子項目分類到數組中,然后用更新推送每個數組。 這會使您的更新從 2 次而不是 3 次下降。 為什么它可能更好的示例:如果您有 5 件商品並且它們都來自同一個餐廳 ID,那么您將進行 5 次更新,而不僅僅是 1 次。
我認為您的問題是您的orders
無效。 Firebase 具有 JSON 結構。 所有的鍵都必須是唯一的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.