Чтобы добавить отметку времени createdAt
к записи Post
через облачную функцию, выполните следующие действия:
exports.postsCreatedDate = functions.firestore
.document('Posts/{postId}')
.onCreate((snap, context) => {
return snap.ref.set(
{
createdAt: admin.firestore.FieldValue.serverTimestamp()
},
{ merge: true }
);
});
Чтобы добавить отметку времени modifiedAt
к существующей Post
Вы можете использовать следующий код. ОДНАКО , эта облачная функция будет запускаться каждый раз, когда изменяется поле документа Post, включая изменения полей createdAt
и updatedAt
, , оканчивающихся бесконечным циклом ....
exports.postsUpdatedDate = functions.firestore
.document('Posts/{postId}')
.onUpdate((change, context) => {
return change.after.ref.set(
{
updatedAt: admin.firestore.FieldValue.serverTimestamp()
},
{ merge: true }
);
});
Таким образом, вам необходимо сравнить два состояния документа (то есть change.before.data()
и change.after.data()
, чтобы определить, касается ли изменение поля, которое не является createdAt
или updatedAt
.
Например, представьте, что ваш почтовый документ содержит только одно поле name
(без учета двух полей меток времени), вы можете сделать следующее:
exports.postsUpdatedDate = functions.firestore
.document('Posts/{postId}')
.onUpdate((change, context) => {
const newValue = change.after.data();
const previousValue = change.before.data();
if (newValue.name !== previousValue.name) {
return change.after.ref.set(
{
updatedAt: admin.firestore.FieldValue.serverTimestamp()
},
{ merge: true }
);
} else {
return false;
}
});
ВДругими словами, боюсь, вам нужно сравнивать два состояния документа поле за полем ....