var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_ref.delete();
Erreur renvoyée
jobskill_ref.delete n'est pas une fonction
Vous ne pouvez supprimer un document que lorsque vous avez une DocumentReference
. Pour obtenir cela, vous devez d'abord exécuter la requête, puis parcourir la QuerySnapshot
et enfin supprimer chaque DocumentSnapshot
en fonction de sa 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();
});
});
J'utilise batched write for this. Par exemple:
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 async/attend:
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();
la partie clé de la réponse de Frank qui a résolu mes problèmes était le .ref
dans doc.ref.delete()
Je n'avais à l'origine que doc.delete()
qui a donné une erreur "not a function". maintenant mon code ressemble à ceci et fonctionne parfaitement:
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);
});
Et bien sûr, vous pouvez utiliser wait/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,
});
}
});
Je ne sais pas pourquoi vous devez obtenir () eux et boucle sur eux, puis delete () eux, alors que vous pouvez préparer une requête avec où supprimer en une étape Déclaration SQL, mais Google a décidé de le faire comme ça. donc, pour l'instant, c'est la seule option.