Seb*_*oFr 5 database firebase google-cloud-firestore
每天我都将来自外部零售商的产品导入Google Cloud Firestore数据库。
在该过程中,产品可以是新的(新文档将添加到数据库中),也可以是现有的(现有文档将在数据库中更新)。
应该注意的是,我每天导入大约 1000 万件产品,所以我不会查询每个产品的数据库来检查它是否已经存在。
我目前正在使用set 和 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;
});
});
Run Code Online (Sandbox Code Playgroud)
根据上面的 Bob Snyder 评论,请注意,您还可以执行以下操作:
const docCreatedTimestamp = snap.createTime;
return snap.ref.set(
{
calculatedCreatedAt: docCreatedTimestamp
},
{ merge: true }
)
.catch(...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5609 次 |
| 最近记录: |