我正在编写一些Node.js代码,以将数据从现有数据库导入Firebase Cloud Firestore。我们已经创建了要在过渡中保留的日期,但我注意到当我将它们包含在设置的对象中时,该日期始终是文档创建的日期,因此原始日期会丢失。如果我再次运行导入脚本,则设置是更新现有文档,则将保留我指定的createdAt和updatedAt值。
如何在插入新数据时使它使用指定的值,而不用当前时间戳覆盖它们?
const oldNote = {
id: "someid",
text: "sometext",
createdAt: dateobj,
updatedAt: dateobj
}
const note = {
text: oldNote.text,
createdAt: firebase.firestore.Timestamp.fromDate(oldNote.createdAt),
updatedAt: firebase.firestore.Timestamp.fromDate(oldNote.updatedAt)
};
firestoredb.collection("notes").doc(oldNote.id).set(note).then((docRef) => {
//FIXME: createdAt and updatedAt aren't preserved, always today
}).catch((error) => {
console.error("Error setting user: ", error);
});
如果要更新存在的文档而不覆盖其他字段,请使用update()
而不是set()
。但更重要的是,如果您不想更改字段,则根本不应该在传递给update()
的对象中提供该字段。如果为字段提供值,则将无条件覆盖该值。没有办法改变这种行为。因此,如果您不想更改createdAt或updatedAt,请不要通过它:
const note = {
text: oldNote.text
};
firestoredb.collection("notes").doc(oldNote.id).update(note).then((docRef) => {
//FIXME: createdAt and updatedAt aren't preserved, always today
}).catch((error) => {
console.error("Error setting user: ", error);
});