where 절을 사용하여 firestore에서 문서를 삭제하는 방법
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();
});
});
저는 이것을 위해 일괄 처리된 쓰기를 사용합니다.예:
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();
//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}`);
});
내 문제를 해결한 프랭크의 대답의 핵심 부분은.ref
에doc.ref.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);
});
아니면 이것을 시도해 보세요, 하지만 당신은 사전에 ID를 가지고 있어야 합니다.
export const deleteDocument = (id) => {
return (dispatch) => {
firebase.firestore()
.collection("contracts")
.doc(id)
.delete()
}
}
이제 다음 작업을 수행할 수 있습니다.
db.collection("cities").doc("DC").delete().then(function() {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
이 문제를 해결하는 방법은 각 문서에 고유한 정보를 제공하는 것입니다.ID, 해당 필드에서 쿼리, 문서 가져오기반환된 문서의 ID이며 삭제에 사용됩니다.이와 같은 경우:
(신속)
func rejectFriendRequest(request: Request) {
DispatchQueue.global().async {
self.db.collection("requests")
.whereField("uniqueID", isEqualTo: request.uniqueID)
.getDocuments { querySnapshot, error in
if let e = error {
print("There was an error fetching that document: \(e)")
} else {
self.db.collection("requests")
.document(querySnapshot!.documents.first!.documentID)
.delete() { err in
if let e = err {
print("There was an error deleting that document: \(e)")
} else {
print("Document successfully deleted!")
}
}
}
}
}
}
코드를 조금 정리할 수는 있지만, 이것이 제가 생각해 낸 해결책입니다.그것이 미래에 누군가를 도울 수 있기를 바랍니다!
물론 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,
});
}
});
다른 SQL 문처럼 한 번에 삭제할 위치가 포함된 하나의 쿼리를 준비할 수 있는데 왜 () 그것들을 가져와서 루프한 다음 삭제()해야 하는지 모르겠습니다. 하지만 구글은 그렇게 하기로 결정했기 때문에, 현재로서는 이것이 유일한 옵션입니다.
클라이언트 측에서 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();
};
이것이 클라이언트 측에서 파이어스토어를 사용하는 모든 사람에게 도움이 되기를 바랍니다.
const firestoreCollection = db.collection('job_skills')
var docIds = (await firestoreCollection.where("folderId", "==", folderId).get()).docs.map((doc => doc.id))
// for single result
await firestoreCollection.doc(docIds[0]).delete()
// for multiple result
await Promise.all(
docIds.map(
async(docId) => await firestoreCollection.doc(docId).delete()
)
)
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');
}
언급URL : https://stackoverflow.com/questions/47180076/how-to-delete-document-from-firestore-using-where-clause
'programing' 카테고리의 다른 글
Python 문제의 SQLalchemy에서 Synology NAS의 MariaDB 데이터베이스에 연결 (0) | 2023.06.17 |
---|---|
WooCommerce get_cart() on null (0) | 2023.06.17 |
Django admin에서 동일한 모델에 대한 여러 모델 관리자/뷰 (0) | 2023.06.17 |
문자열에서 숫자 제거 (0) | 2023.06.17 |
변수(개체) 이름을 문자열로 변환하는 방법 (0) | 2023.06.17 |