В машинописном тексте я могу создать документ с полем, таким как созданный, обновленный как метка времени, используя change.after.updateTime
или snap.createTime
внутри триггеров облачных функций.
Но внутри других триггеров, таких как onUpdate
, поле change.after.data().updatedAt
, который предполагает хранить метку времени, дает мне объект.
Как я могу сравнить их, если я не могу получить их в качестве значения метки времени?Как я могу получить поле в качестве значения Timestamp?Спасибо
admin.initializeApp();
const firestore = admin.firestore();
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);
export const setCreatedAt = functions.firestore.document('path')
.onCreate(async (snap, context) => {
return snap.ref.update({
createdAt: snap.createTime, // Type Timestamp
updatedAt: snap.createTime // Type Timestamp
});
});
export const setUpdatedAt = functions.firestore.document('path')
.onUpdate(async (change, context) => {
let beforeTimestamp = change.before.data().updatedAt; // Type object, not Timestamp
let afterTimestamp = change.after.data().updatedAt; // Type object, not Timestamp
console.log('beforeTimestamp', beforeTimestamp);
console.log('afterTimestamp', afterTimestamp);
if (change.before.data().updatedAt === change.after.data().updatedAt) {
change.after.ref.update({
updatedAt: change.after.updateTime, // Type Timestamp
});
}
});
На рисунке ниже показаны журналы при выполнении обновления.
Похоже, настройки { timestampsInSnapshots: true }
не действуют, потому что у меня все еще есть предупреждение внутри консоли.Но почему?
Поведение объектов Date, хранящихся в Firestore, изменится, и ваше приложение может сломаться