firebase 在Firestore中添加Map?

5ssjco0h  于 2023-01-02  发布在  其他
关注(0)|答案(2)|浏览(135)

如何在firestore中追加一个新的Map类型?

void addUser() async {
    final us = _firestore.collection("users").doc(_search.text);
    us.update({
      "requests": (
        {_auth.currentUser?.email: rep}
      ),
    });
  }

我正在使用这个方法,但是我的firestore中的requests域覆盖了我想附加的前一个请求域。有什么想法吗?

rlcwz9us

rlcwz9us1#

update()方法总是用新字段覆盖以前的字段,因此使用update()的一个操作无法实现这一点,但是,您总是可以从文档中获取当前字段,然后更新其值,然后在文档中再次保存它,如下所示:

void addUser() async {
    final us = _firestore.collection("users").doc(_search.text);
    final currentDoc = await us.get(); // we get the document snapshot
    final docDataWhichWeWillChange = currentDoc.data() as Map<String, dynamic>; // we get the data of that document

    docDataWhichWeWillChange{"requests"]![_auth.currentUser?.email] = rep; // we append the new value with it's key 
    
    await us.update({
      "requests": docDataWhichWeWillChange["requests"],
    }); // then we update it again
  }

但是,在使用该方法之前,应该注意到该方法将在数据库中执行两个操作,即get()update()

jyztefdp

jyztefdp2#

如果你想记录多个值,数组是一个合适的类型,所以你可以使用.arrayUnion方法来记录多个条目。

final washingtonRef = db.collection("cities").doc("DC");

// Atomically add a new region to the "regions" array field.
washingtonRef.update({
  "regions": FieldValue.arrayUnion(["greater_virginia"]),
});

相关问题