我试图在使用cloud functions
添加文档之前和之后获取集合中的文档数量,我在nodeJs中编写的代码是:
exports.onShowcaseCreated = functions.firestore
.document("Show/{document}")
.onCreate((snapshot, context) => {
const showcaseDict = snapshot.data();
const uid = showcaseDict.uid;
return db.collection("Showcases").where("uid", "==", uid).get()
.then((showsnap) => {
const numberOfShowcaseBefore = showsnap.size.before;
const numberOfShowcaseAfter = showsnap.size.after;
console.log( numberOfShowcaseBefore, numberOfShowcaseAfter);
if ( numberOfShowcaseBefore == 0 && numberOfShowcaseAfter == 1 ) {
return db.collection("Users").doc(uid).update({
timestamp: admin.firestore.Timestamp.now(),
});
});
});
});
但是控制台日志是undefined undefined
,这似乎不是在添加之前和之后获取文档数量的正确方法
before
和after
属性仅在传递给onCreate
的参数上定义。您在代码中调用该snapshot
,但它实际上是此处定义的Change
对象。
从数据库中读取数据会得到此处定义的QuerySnapshot
对象。正如您所看到的,QuerySnapshot
上的size
只是一个数字,不具有before
或after
属性。
因此,在您的方法触发事件之前,无法确定大小。您在代码中运行的任何查询都会在事件被触发后运行,因此会给您当时的大小。
要实现此用例,我建议在数据库中存储相关文档的数量,然后在文档发生更改时触发云函数。在Cloud Function代码中,您可以从传入的change
文档中读取以前和新的大小值。