我正在制作聊天应用并将消息存储在firebase中,这是我的结构:
{
"1405093" : {
"172341" : {
"bot" : {
"msg" : [ {
"msg" : "hi",
"timestamp" : "12:09:02"
}, {
"msg" : "bye",
"timestamp" : "12:11:03"
} ]
},
"consultant" : {
"msg" : "Hi"
},
"resolved" : false,
"user" : {
"module" : "",
"msg" : [ {
"msg" : "hi",
"timestamp" : "12:09:01"
}, {
"msg" : "bye",
"timestamp" : "12:11:01"
} ]
}
},
"172351" : {
"bot" : {
"msg" : [ {
"msg" : "hi",
"timestamp" : "12:09:02"
}, {
"msg" : "bye",
"timestamp" : "12:11:03"
} ]
},
"consultant" : {
"msg" : "Hi"
},
"resolved" : true,
"user" : {
"module" : "",
"msg" : [ {
"msg" : "hi",
"timestamp" : "12:09:01"
}, {
"msg" : "bye",
"timestamp" : "12:11:01"
} ]
}
}}
这是我的代码
if(method === "addUser&Bot")
{
umsg=data.umsg;
bmsg=data.bmsg;
ref.child(user+"/"+ticket_id).set({
"user":{
"msg":umsg,
"module":""
},
"bot":{
"msg":bmsg
},
"consultant":{
"msg":"Hi"
},
"resolved":false
});
data={"name":user,"id":ticket_id}
res.json(data);
}
正如你可以看到我使用set功能这是因为像172341这样的字段实际上是ticket_no,它总是唯一的,我不想创建随机生成的值通过firebase。所以问题是,当ticket_no是新的时,第一次这很好用,但是当我再次发送消息时,先前的消息被覆盖。那么如何编写处理新的ticket_no和消息的代码以及之后发送的消息。
答案 0 :(得分:0)
如果您只想更新传递给数据库的值,并保留未经修改的任何内容,请使用update(...)
代替set(...)
:
ref.child(user+"/"+ticket_id).update({
"user":{
"msg":umsg,
"module":""
},
"bot":{
"msg":bmsg
},
"consultant":{
"msg":"Hi"
},
"resolved":false
});
这只会写出user
,bot
,consultant
和resolved
属性,并且不会修改任何其他属性。但它会覆盖user
,bot
,consultant
和resolved
属性的完整值。如果要进行深度更新,可以指定要更新的内容的精确路径:
ref.child(user+"/"+ticket_id).update({
"user/msg": umsg,
"user/module": "",
"bot/msg": bmsg,
"consultant/msg": "Hi",
"resolved":false
});
这最后一个语句只会写入/更新指定的精确路径,并保留其他所有未修改的路径。