var jobskill_ref = db.collection('job_skills').where('job_id','==',post.job_id);
jobskill_ref.delete();
引发错误
jobskill_ref.delete不是函数
答案 0 :(得分:24)
只有拥有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();
});
});
答案 1 :(得分:6)
为此,我使用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();
答案 2 :(得分:3)
//The following code will find and delete the document from firestore
const doc = await this.noteRef.where('userId', '==', userId).get();
doc.forEach(element => {
element.ref.delete();
console.log(`deleted: ${element.id}`);
});
答案 3 :(得分:1)
弗兰克回答问题的关键部分是我.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);
});
答案 4 :(得分:0)
当然,您可以使用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,
});
}
});
我不知道为什么您必须获取()并在它们上循环,然后删除(),而您可以像任何SQL语句一样,准备在一个步骤中将其删除的查询,但是Google决定这样做。因此,目前,这是唯一的选择。
答案 5 :(得分:0)
delete(seccion: string, subseccion: string)
{
const deletlist = this.db.collection('seccionesclass', ref => ref.where('seccion', '==', seccion).where('subseccion', '==' , subseccion))
deletlist.get().subscribe(delitems => delitems.forEach( doc=> doc.ref.delete()));
alert('record erased');
}
答案 6 :(得分:0)
如果在客户端使用Cloud Firestore,则可以使用唯一密钥生成器程序包/模块(例如uuid)来生成ID。然后,将文档的ID设置为从uuid生成的ID,并将对该ID的引用存储在要存储在Firestore中的对象上。
例如: 如果要将个人对象保存到Firestore,首先,请使用uuid为该人生成ID,然后再进行如下保存。
const uuid = require('uuid')
const person = { name: "Adebola Adeniran", age: 19}
const id = uuid() //generates a unique random ID of type string
const personObjWithId = {person, id}
export const sendToFireStore = async (person) => {
await db.collection("people").doc(id).set(personObjWithId);
};
// To delete, get the ID you've stored with the object and call // the following firestore query
export const deleteFromFireStore = async (id) => {
await db.collection("people").doc(id).delete();
};
希望这可以帮助在客户端使用Firestore的任何人。
答案 7 :(得分:0)
您现在可以执行以下操作:
db.collection("cities").doc("DC").delete().then(function() {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
答案 8 :(得分:-2)
与标记的答案不同,这将捕获错误并且不会标记功能日志,您也可以将其作为相同的代码应用于云功能。您可以根据需要解开此代码。请记住,不要偷懒,做正确的事,否则您已经在编写遗留代码。
const users = await admin.firestore()
.collection('users')
.where('age', '===', someNumber).get()
const deleteUser = async (userUid: string) => {
await admin.firestore().collection('users').doc(userUid).delete()
}
const usersToDeleteActions: Array<Promise<Result>> = []
users.docs.foreach((doc) => {
usersToDeleteActions.push(deleteUser(doc.id))
})
await Promise.all(usersToDeleteActions)