我要更新这样的文档:
db.collection('users').doc(user_id).update({foo:'bar'})
但是,如果doc user_id不存在,则上面的代码将引发错误。 因此,如何告诉Firestore创建学生(如果不存在),换句话说,是这样的:
db.collection('users').doc(user_id).set({foo:'bar'})
答案 0 :(得分:13)
我认为您想使用以下代码:
db.collection('users').doc(user_id).set({foo:'bar'}, {merge: true})
这将使用提供的数据设置文档,并使其他文档字段保持不变。最好不确定文档是否存在。只需通过选项即可合并新数据与任何现有文档,以避免覆盖整个文档。
有关使用Firestore管理数据的详细信息,请检查this link
答案 1 :(得分:4)
如果您需要created
和updated
时间戳之类的东西,可以使用此技术:
let id = "abc123";
let email = "john.doe@gmail.com";
let name = "John Doe";
let document = await firebase.firestore().collection("users").doc(id).get();
if (document && document.exists) {
await document.ref.update({
updated: new Date().toISOString()
});
}
else {
await document.ref.set({
id: id,
name: name,
email: email,
created: new Date().toISOString(),
updated: new Date().toISOString()
}, { merge: true });
}
如果文档没有created
和updated
时间戳,它将创建文档,但是仅更改updated
时间戳(如果存在)。