var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_ref.delete();
抛出错误
jobskill_ref.delete不是函数
只有在拥有DocumentReference
后才能删除该文件。要获取该信息,您必须首先执行查询,然后遍历QuerySnapshot
,最后根据其DocumentSnapshot
删除每个ref
。
var jobskill_query = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_query.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
doc.ref.delete();
});
});
我为此使用batched writes。例如:
var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id);
let batch = firestore.batch();
jobskill_ref
.get()
.then(snapshot => {
snapshot.docs.forEach(doc => {
batch.delete(doc.ref);
});
return batch.commit();
})
ES6异步/等待:
const jobskills = await store
.collection('job_skills')
.where('job_id', '==', post.job_id)
.get();
const batch = store.batch();
jobskills.forEach(doc => {
batch.delete(doc.ref);
});
await batch.commit();
Frank回答中解决我的问题的关键部分是.ref
中的doc.ref.delete()
[我最初只有doc.delete()
给出了“不是函数”错误。现在,我的代码看起来像这样,并且运行良好:
let fs = firebase.firestore();
let collectionRef = fs.collection(<your collection here>);
collectionRef.where("name", "==", name)
.get()
.then(querySnapshot => {
querySnapshot.forEach((doc) => {
doc.ref.delete().then(() => {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
当然,您可以使用await / async:
exports.delete = functions.https.onRequest(async (req, res) => {
try {
var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id).get();
jobskill_ref.forEach((doc) => {
doc.ref.delete();
});
} catch (error) {
return res.json({
status: 'error', msg: 'Error while deleting', data: error,
});
}
});
我不知道为什么您必须对它们进行get()和loop,然后对它们进行delete(),而您可以准备一个查询,并一步一步地删除像任何SQL语句一样,但是Google决定那样做。因此,目前,这是唯一的选择。
我面临类似的问题,但是在dart中,有人可以将给定的代码转换为dart代码吗?>>
var jobskill_query = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_query.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
doc.ref.delete();
});
});