【问题标题】:How to add document with map data to firestore using flutter如何使用颤振将带有地图数据的文档添加到 Firestore
【发布时间】:2020-10-28 12:05:52
【问题描述】:

我想要一个像下面这样的文件

但是当我使用以下代码添加包含地图的新文档时,它会添加如下图所示的数据

 Firestore.instance.collection('users').document(some_docID).updateData({
      'map1.key1': 'value1',
      'map1.key2': 'value2'
    });

即使我使用 setData,它仍然会添加如下数据,而不是我想要的上图中的数据。

还有一件事是,如果文档已经存在并且它至少有一个地图字段,那么如果我使用上面的代码,它只会将数据添加为地图。问题仅在我想使用地图值创建新文档时。如果有人能提出解决方案将是很大的帮助。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    document.updateDatadocument.setData有几个区别需要了解:

    首先,您不能创建使用updateData 的文档。必须在调用updateData 之前创建文档,否则调用将失败。这可能是您的问题的根源。

    使用嵌套数据创建文档

    您必须使用document.setDatasetData 要求您以“嵌套”格式指定数据,其中字段不是“扁平化”或“点分隔”。

    所以对于你的例子:

     Firestore.instance.collection('users').document(some_docID).setData({
          'map1': {
            'key1': 'value1',
            'key2': 'value2',
          }});
    

    使用嵌套数据更新文档

    如果你想保证之前创建了一个文档,那么你应该使用document.updateData(如前所述,如果之前没有创建document,它将失败)。

    updateData 要求以“点分隔”方式指定嵌套字段。

    所以对于你的例子:

    updateData({
          'map1.key1': 'value1',
          'map1.key2': 'value2',
    });
    

    updateData 中使用嵌套字段意外覆盖字段

    如果您将嵌套格式的数据传递给updateData,它将假定您希望完全用后续数据替换键的值。

    例如,如果您的文档有数据 {'a': {'b': 2, 'c': 3}} 并且您运行 updateData({'a': {'b': 4}}),那么文档将不会a.b 替换为 4,但也会删除 c 字段,因为它不包含在传递给updataDataa 值中。

    对于明确的字段,请使用点分隔格式或setData(data, merge: true)(见下文)。

    使用setData更新数据

    注意:您仍然可以使用setData 来更新文档上的数据。不过,所需的格式是“嵌套的”而不是点分隔的。

    如果您只想显式更新document 的某些字段,则将merge: true 传递给setData

    【讨论】:

    • 我现在明白了...感谢您的详细解释...真的很有帮助:)
    【解决方案2】:

    你必须像这样添加数据:

     Firestore.instance.collection('users').document(some_docID).updateData({
        "map1" : {
          "key1" : "value1",
          "key2" : "value2"
        }
        });
    

    这将在数据库中创建一个地图。

    【讨论】:

    • 这个答案在两个方面具有误导性。首先,问题是如何添加一个文档,也就是创建。如果之前未创建文档,updateData 将失败。其次,如果文档中有map1.key3 字段,您的方法将删除该字段。该问题的目的可能是仅更新 map1.key1map2.key2 并保持所有其他字段不变。详情请看我的回答
    猜你喜欢
    • 2018-11-06
    • 2020-10-23
    • 2021-03-18
    • 2020-05-15
    • 1970-01-01
    • 2021-06-05
    • 2021-06-27
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多