gpt4 book ai didi

firebase - 如何使用Flutter将包含 map 数据的文档添加到Firestore

转载 作者:行者123 更新时间:2023-12-03 03:11:22 26 4
gpt4 key购买 nike

我想要一个像下面的文件
enter image description here
但是,当我使用以下代码添加包含 map 的新文档时,它将添加数据,如下图所示

 Firestore.instance.collection('users').document(some_docID).updateData({
'map1.key1': 'value1',
'map1.key2': 'value2'
});
即使我使用setData,它仍然会按以下方式添加数据,而不是如上图所示的那样。
enter image description here
还有一件事是,如果文档已经存在并且至少具有一个map字段,那么如果我使用上述代码,它将仅将数据添加为map。问题仅在我想使用 map 值创建新文档时出现。如果有人可以提出解决方案,那将是很大的帮助。

最佳答案

document.updateData document.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字段,因为该字段未包含在传递给 aupdataData值中。
要仅明确显示字段,请使用以点分隔的格式或 setData(data, merge: true)(请参见下文)。
使用 setData更新数据
注意:您仍然仍然可以使用 setData更新文档上的数据。不过,所需的格式是“嵌套的”而不是点分隔。
如果您只想显式更新 document的某些字段,则将 merge: true传递给 setData

关于firebase - 如何使用Flutter将包含 map 数据的文档添加到Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62788695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com