【问题标题】:I need to update document if exists otherwise create如果存在,我需要更新文档,否则创建
【发布时间】:2020-05-11 08:04:33
【问题描述】:

如果存在,有什么方法可以更新文档,否则创建文档。现在我使用update 方法,但如果文档不存在,则会抛出错误消息。

Firestore.instance.collection('partnerRequests').document(user.uid).updateData( {
                  DateTime.now().millisecondsSinceEpoch.toString():partnerRegistrationFormData})

未处理的异常:类型“PlatformException”不是类型的子类型 '字符串'

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    如果您正在调用updateData() 函数,则只有当它已经存在于您的partnerRequests 集合中时,您才会更新该文档。如果该特定文档不存在,则updateData() 调用将失败,您向我们展示的例外情况除外。

    另一方面,如果你调用setData()函数:

    docRef.setData(data, merge: true)
    

    如果文档不存在,您将创建它,如果它已经存在,则更新它。这基本上就是这两个函数的区别。

    回答你的问题:

    如果存在,我需要更新文档,否则创建

    你绝对应该使用setData()。

    【讨论】:

    • 好的,当它更新时它会删除旧值,例如文档包含值 a1,b1,c1 并且我调用 setdate 并且如果新数据只包含 fleds a1 和 b1 它是删除 c1 还是它更新 a1 和 b1 并保留 c1?
    • 如果您只想更新某些字段而让其他字段保持不变,请使用 update(),正如我在此 post 的回答中所解释的那样。
    • 当然,现在我正在做另一个项目,周末我会检查并接受这个答案。抱歉耽搁了
    • @Midhilaj 好的,请随时通知我。谢谢。
    【解决方案2】:

    我相信答案就在这个帖子里:Firebase update vs set

    具体来说,您需要使用方法.set({dataToSet},{merge:boolean}),如果文档不存在,它将创建该文档,然后您通过merge 选择如果它已经存在会发生什么(true = 更新现有字段并添加新的,false = 覆盖该位置的所有现有数据)。

    【讨论】:

    • 您作为示例提供的 stackoverflow 的答案是针对 Firebase 实时数据库,并且 OP 正在询问有关 Cloud Firestore 的问题。 Firebase 实时数据库和 Cloud Firestore 是两种不同的产品。它们每个都有不同的方法来更新数据库中的元素。
    猜你喜欢
    • 2018-09-13
    • 2019-08-04
    • 2021-02-24
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多