gpt4 book ai didi

database - 在 Firestore 中管理 createdAt 时间戳

转载 作者:搜寻专家 更新时间:2023-10-30 20:14:25 25 4
gpt4 key购买 nike

我每天都从外部零售商进口产品到一个Google Cloud Firestore数据库。

在此过程中,产品可以是新的(新文档将添加到数据库中)或现有的(现有文档将在数据库中更新)。

请注意,我每天要导入大约 1000 万件产品,因此我不会查询每个产品的数据库以检查它是否已经存在。

我目前正在使用 set with merge ,这正是我所需要的,因为它会在文档不存在时创建文档或更新现有文档的特定字段。

现在的问题是,如果提供的字段将被更新,我如何才能实现 createdAt 时间戳,因此原始 createdAt 时间戳将在更新时丢失?如果某个字段已存在于文档中,是否有任何方法可以不更新该特定字段?

最佳答案

我建议您使用 Cloud Functions,它会在创建 Firestore 文档时创建一个新的专用字段。当您更新文档时,该字段不应包含在您传递给 set() 方法的对象中。

这里是 Cloud Function 代码的提案:

const functions = require('firebase-functions');

const admin = require('firebase-admin');

admin.initializeApp();


exports.productsCreatedDate = functions.firestore
.document('products/{productId}')
.onCreate((snap, context) => {

return snap.ref.set(
{
calculatedCreatedAt: admin.firestore.FieldValue.serverTimestamp()
},
{ merge: true }
)
.catch(error => {
console.log(error);
return false;
});
});

根据 Bob Snyder 上面的评论,请注意您还可以:

const docCreatedTimestamp = snap.createTime;
return snap.ref.set(
{
calculatedCreatedAt: docCreatedTimestamp
},
{ merge: true }
)
.catch(...)

关于database - 在 Firestore 中管理 createdAt 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51656107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com