[创建对象中的createdAt和updatedAt在创建文档时被覆盖

问题描述 投票:0回答:1

我正在编写一些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);
});
javascript firebase google-cloud-firestore
1个回答
0
投票

如果要更新存在的文档而不覆盖其他字段,请使用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);
});
© www.soinside.com 2019 - 2024. All rights reserved.