我正在尝试在用户和我之间创建聊天,以实现客户支持目的,为此,我希望登录用户可以转到联系页面,他们可以输入消息并点击发送,这将更新新的消息包含他们的消息以及时间戳的文档。
setup(){
const { Chat, error, load } = getChat();
load();
const message = ref('')
const Activate = ref(false)
const handleSubmit = async () => {
const NewChat = {
message: message.value,
createdAt: timestamp(),
}
const res = await projectFirestore.collection('Subscribed').doc(firebaseAuth.currentUser.uid).collection('messages').doc().update(NewChat)
}
return { handleSubmit, Activate, message, Chat, load }
}
正如您在上面看到的,我希望更新的位置位于具有用户 UID 的文档内的“订阅”集合内,然后位于“消息”集合内,我想在其中添加一个新文档消息以及每次键入和发送消息时其中的 UID。
我遇到的错误是
我不明白为什么会发生这种情况,因为我之前已经做过类似的其他更新,唯一的区别是更新发生在 UID 文档内部,而且我不必深入到下一个集合,所以我认为问题出在文档中的集合。我在检索消息集合中的数据以显示消息时也遇到了类似的问题,但我可以通过将以下代码写入 JavaScript 文档,然后将数据导入到消息页面来解决此问题。
import { projectFirestore } from "../Firebase/Config";
import { ref } from "vue"
import { firebaseAuth } from "../Firebase/firebase";
const getChat = () => {
const Chat = ref([])
const error = ref(null)
let lastDoc = null;
const load = async () => {
try {
let query = projectFirestore.collection('Subscribed').doc(firebaseAuth.currentUser.uid).collection('messages').orderBy('createdAt')
if (lastDoc) {
query = query.startAfter(lastDoc)
}
const res = await query.get()
if (!res.empty) {
lastDoc = res.docs[res.docs.length - 1]
// Add new results to exsiting ones
Chat.value = [...Chat.value, ...res.docs.map(doc => {
// console.log(doc.data())
return {...doc.data(), id: doc.id}
})]
}
}
catch (err){
error.value = err.message
// console.log(error.value)
}
}
return { Chat, error, load }
}
export default getChat
然后,我能够在导入消息的页面上成功显示消息集合消息,但我无法在此处进行更新,因为我不追求集合中的内容,但我需要指定要更新的路径收藏里面。
我确实需要将文档添加到消息集合中。 有谁知道如何使此更新功能起作用并更新文档内的消息集合?