簡體   English   中英

如何在不覆蓋整個 Map 的情況下將新的 Map 條目添加到 Map?

[英]How do I add a new Map entry to a Map without overwriting the entire Map?

在我的 Firestore 數據庫中,我有一個名為“視頻”的文檔,其編號為 Map。

在其中,我添加了另一個 Map,其中包含我的視頻數據。

所以它看起來像這樣:

Videos (Map) :
    2022-Oct-03-14:24 (Map):
        Title: Hi

現在我想要做的是,將另一個 Map 添加到具有不同日期的Videos中。 我如何在 Flutter 中執行此操作?

目前,我正在做:

db.collection('Collection').doc('Document').update({
    'Videos': {
        '2022-Oct-03-14:55': {
             'Title': 'Ok'
         }
    }
});

但它所做的是,它覆蓋了整個Videos map 並分配了我提供的這個新的 map,因此帶有 Title Hi的舊 Map 被刪除。 如何插入新地圖?

如果你有一個數組字段, Alex 的答案是正確的,但你只有 map 個字段。 在這種情況下,您可以使用. 僅更新/寫入嵌套字段的符號:

db.collection('Collection').doc('Document').update({
    'Videos.2022-Oct-03-14:55.Title': 'Ok'
});

另請參閱有關更新嵌套 object 中的字段的 Firebase 文檔。

要在Videos map 中添加新的 object,您有兩種選擇。 第一個是使用. (點)表示法,正如@FrankvanPuffelen 在他的回答中提到的那樣,它可以很好地工作。 這意味着如果Videos字段不存在,它確實會創建它,如果2022-Oct-03-14:55子字段不存在,它會在其中添加子字段,然后在其中添加標題。 但是,由於它是一個更新操作,因此只有當文檔已經存在時,該解決方案才會起作用,否則,它將失敗。

如果您需要在尚不存在的文檔中創建Videos字段,則應考慮使用 set() function 和 merge true。 但是,此解決方案不適用於使用. 符號。 因此,為此,我建議您在以下帖子中查看我的回答:

第二種解決方案是先閱讀文檔/地圖。 這不是強制性的,但它會幫助您檢查現有的 object 是否存在。為什么,因為這些對象是地圖,當涉及到地圖時,如果您添加具有相同鍵的記錄,那么它會將舊值替換為新的一個。 所以我建議你必須先檢查一下。

所以為了執行加法運算,你必須:

  1. 閱讀以閱讀文檔。
  2. 在 memory 中獲取Videos map。
  3. 檢查視頻是否已存在。
  4. Videos中添加新的 map 。
  5. 將文檔寫回 Firestore。

如果您將擁有一個 map,其密鑰與前一個密鑰完全相同,那么數據將被覆蓋,這意味着您將看不到密鑰有任何變化,但只有在值不同時才會看到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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