我有一个ProductDatabase集合,它存储了我在应用程序上显示的所有产品。集合中的每个文档都有一个名为“SBD”的时间戳字段,它代表每个项目的销售日期。我创建并上传了一个云函数,它每2小时检查数据库中的每个项目,以检查每个项目的SBD字段没有通过。这是函数:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.delete = functions
.region("europe-west2")
.pubsub.schedule("every 2 hours").onRun((context) => {
const productsRef = admin.firestore().collection("TestDatabase");
const query = productsRef.where("SBD", "<", Date.now());
return query.get()
.then((querySnapshot) => {
const batch = admin.firestore().batch();
querySnapshot.forEach((doc) => {
batch.delete(doc.ref);
});
return batch.commit();
});
});
这个程序上传出现在firebase cloud functions控制台,并说它每2小时被调用一次,但是没有产品从TestDatabase中删除,即使它们都应该被删除。index.js文件存储在谷歌云控制台的一个桶中,该控制台拥有所有必要的权限。数据库和云函数也在同一个区域。
1条答案
按热度按时间31moq8wy1#
问题是你在
SBD
字段上做了一个无效的比较。如果SBD
是一个Timestamp
对象,那么你的查询必须在比较中使用Timestamp
对象,而不是Date
对象。这是一个无效的比较,将始终返回0条记录,因为您不能比较两个不同的对象类型:
这是由getting UNIX time执行的有效比较,并将其转换为
Timestamp
:你可以在How to compare firebase timestamps?阅读更多。