我有一个名为Posts的Firestore收藏
我在客户端插入了它,并且可以正常工作。
我想使用firebase函数将createdAt和updatedAt字段添加到我的帖子集合firestore中的每个插入中。
最佳答案
为了通过Cloud Function将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
字段的更改,以无限循环结尾)时,都会触发此Cloud Function。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
。例如,假设您的Post文档仅包含一个字段
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;
}
});
换句话说,恐怕您必须逐字段比较两个文档状态...。