簡體   English   中英

如何將元素推送到 Firestore 文檔集合中的數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM