Swift Firebase数据库覆盖

时间:2018-11-26 18:56:51

标签: ios swift firebase firebase-realtime-database overwrite

我正在使用Firebase制作一个实时Messenger。当前,每当我按下一个按钮时,我都希望将新消息附加到带有消息索引的通道上,但是目前,每当我按下该按钮时,都会创建一个新消息来覆盖旧消息。我知道setValue通常是问题所在,但我真的无法确定我在做什么错。 What the database looks like before I add my new message。添加新消息here,然后添加要用于添加到数据库中的代码后,它就是这样。

docker events | grep -v "container exec_"

1 个答案:

答案 0 :(得分:0)

好的,Firebase不是传统的基于表的数据库,而是基于DOCUMENT的数据库。在最顶部,您有一个叫做“集合”的东西,它只是“文档”东西的列表。在您的情况下,您将有几个集合内容可以用作渠道:“常规”,“ TopicQ”,“ InterstingStuff”等,并且其中每个消息都作为文档。无需文档,然后列出其中的消息。

第二,在使用索引时,您不需要索引,将消息id设置为消息的属性,因为Firebase支持按字段查询,即使这样,也存在疑问,因为如果您将每条消息都设为文档,如果需要的话,会有自己的自动生成的ID。

第三,在您的代码中每次都重写整个文档,这就是为什么您丢失以前的消息的原因,因此,如果保留它,则需要添加合并选项:

// Update one field, creating the document if it does not exist.
db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)