2 dart firebase flutter google-cloud-firestore
我想要一个像下面这样的文件
但是当我使用以下代码添加包含地图的新文档时,它会添加如下图所示的数据
Firestore.instance.collection('users').document(some_docID).updateData({
'map1.key1': 'value1',
'map1.key2': 'value2'
});
Run Code Online (Sandbox Code Playgroud)
即使我使用 setData 它仍然添加如下数据,而不是我想要的上图中的数据。
还有一件事是,如果文档已经存在并且它至少有一个地图字段,那么如果我使用上面的代码,它只会将数据添加为地图。问题仅在于我想用地图值创建新文档时。如果有人可以提出解决方案,那将有很大帮助。
document.updateData和之间有几个区别document.setData,需要理解:
首先,你不能创建使用文档updateData。必须在调用之前创建文档,updateData否则调用将失败。这可能是您问题的根源。
您必须使用document.setData. setData要求您以“嵌套”格式指定数据,其中字段不是“扁平化”或“点分隔”。
所以对于你的例子:
Firestore.instance.collection('users').document(some_docID).setData({
'map1': {
'key1': 'value1',
'key2': 'value2',
}});
Run Code Online (Sandbox Code Playgroud)
如果你想保证一个文档是之前创建的,那么你应该使用document.updateData(如前所述,如果之前document没有创建,将会失败)。
updateData 要求以“点分隔”方式指定嵌套字段。
所以对于你的例子:
updateData({
'map1.key1': 'value1',
'map1.key2': 'value2',
});
Run Code Online (Sandbox Code Playgroud)
updateData如果您将嵌套格式的数据传递给updateData,它将假定您希望用后续数据完全替换键的值。
例如,如果您的文档数据{'a': {'b': 2, 'c': 3}}并运行updateData({'a': {'b': 4}})该文件将不只是替换a.b与4,也将删除c字段,因为它没有在包括a传递给值updataData。
要仅明确字段,请使用点分隔格式或setData(data, merge: true)(见下文)。
setData注意:您还可以使用setData更新文档上的数据。尽管如此,所需的格式是“嵌套的”而不是点分隔的。
如果您只想document显式更新某些字段,则传递merge: true到setData.
| 归档时间: |
|
| 查看次数: |
3358 次 |
| 最近记录: |