javascript - 如何保存多条消息并将其保存在 Firestore 的单独字段中?
问题描述
这是某个用户的firestore文档:
这就是我将如何保存要保存在 Firestore 中的消息:
const [msg, setMsg] = useState("");
const handleSubmit = (e) => {
e.preventDefault();
try {
const userRef = firestore.collection("users").doc(uid);
const ref = userRef.set(
{
msg,
},
{ merge: true }
);
console.log(" saved");
} catch (err) {
console.log(err);
}
};
return (
<div>
<form onSubmit={handleSubmit}>
<TextField
value={msg}
onChange={(e) => setMsg(e.target.value)}
/>
<Button type="submit">
Submit
</Button>
</form>
</div>
);
};
这样,我可以将消息保存在 firestore 中,但是,如果我要发送另一条消息,它将替换保存在其中的上一条消息。如何在 Firestore 中保存一条消息并保存另一条消息而不影响上一条消息?
解决方案
我了解您正在覆盖users
集合中的同一文档。这可能是(我们看不到整个代码),因为您没有更改uid
两次写入之间的值。uid
作为文档 ID,它会被覆盖(即使您使用该{ merge: true }
选项,如果msg
对象包含现有字段,它们也会被覆盖)。
您提到您保存消息,所以我想您想为给定用户保存几条消息(该用户由 标识uid
)。因此,您可以在用户的文档下有一个子集合,并让 Firestore 每次将文档添加到此集合时,使用该add()
方法生成一个新的文档 ID。
大致如下:
const messagesCollection = firestore.collection("users").doc(uid).collection('messages');
const messagePayload = {foo: 'bar', bar: 'foo'};
messagesCollection.add({messagePayload});
推荐阅读
- c - 将字节数组转换为整数
- android - Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion
- c++ - 内置类型的运算符函数
- firefox - Firefox中的选择和模糊事件
- python - 如何在不使用 Python 中的任何线程的情况下同时在 OpenCV 和 tkinter 窗口中打开网络摄像头框架?
- mysql - 如何在 laravel 中同时使用 DB::raw 中的 CONCAT 和 IFNULL?
- c# - 我将如何缩短内存地址以便它在 IntPtr 中工作?
- javascript - 在下拉列表中什么都看不到。尽管悬停它是。为什么?
- html - 什么是?
- java - 用于打印集合的所有子集/将字符串转换为 char[] 的 Java 程序