如何判断Firestore中已存在的文档是否为空(无字段)
解决Firestore文档空字段检查问题
你获取文档的代码如下:
const risultati = await firestore.collection("Risultati").doc("risultati").get();
该文档始终存在,但有时不含任何字段,你尝试用risultati.data().length检查是否为空却返回undefined——原因是Firestore的data()方法返回普通JavaScript对象,对象本身没有length属性,只有数组才有该属性。
正确的空文档检查方法
要判断文档是否无字段,可通过获取对象的键名数组并检查其长度:
const docData = risultati.data(); // 检查对象是否为空(无任何字段) const isEmpty = Object.keys(docData).length === 0;
优化你的字段删除函数
你当前的删除函数循环逐个执行update,会产生多次Firestore请求,效率较低。可以优化为批量删除:
const fieldValue = require("firebase-admin").firestore.FieldValue; // 确保已引入 exports.delete = functions.pubsub .schedule('55 3 * * *') .onRun(async (context) => { const docRef = firestore.collection("Risultati").doc("risultati"); const docSnap = await docRef.get(); const data = docSnap.data(); const updates = {}; // 收集所有需要删除的字段 for (const id in data) { if (data[id] !== 0) { updates[id] = fieldValue.delete(); } } // 只有存在要删除的字段时才执行更新 if (Object.keys(updates).length > 0) { await docRef.update(updates); } return null; });
这样只需一次update请求即可完成所有字段删除,减少资源消耗。
内容的提问来源于stack exchange,提问作者faccio
相关产品推荐
相关产品推荐

