Stripe로 결제 시스템을 실행하고 구매가 성공할 때마다 Firestore의 수량 필드를 줄이려고합니다. 문서를 얻을 수 있지만 업데이트 방법을 찾는 데 어려움을 겪고 있습니다.
db.collection('products').where('id', '==', dbRef).get()
.then(querySnapshot => {
return querySnapshot.forEach(doc => {
return res.json({
data: doc.data(),
err: err
})
})
})
{
"data": {
"stripe": {
"sku": "sku_xxx",
"product": "prod_xxx"
},
"name": "VERSA HOODIE",
"id": "pmz0pvfa",
"createdBy": "Q3Vn0LLRnSWzxaeOK7V0UYbuiKF2",
"price": "25.00",
"quantity": 10,
"inStock": true,
"description": "TEST PRODUCT",
"imageURL": "https://xxx"
},
"err": null
}
같은 것을 시도했지만 doc.update({})
작동하지 않습니다. 미리 감사드립니다.
(쿼리가 항상 하나의 문서 만 반환하는 경우 아래 참조)
쿼리에서 반환 된 모든 문서를 업데이트하려면 다음과 같이 s 의 update()
메서드 를 호출해야 합니다.DocumentReference
db.collection('products').where('id', '==', dbRef).get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
const docRef = doc.ref;
docRef.update({...});
})
})
모든 업데이트가 언제 완료되었는지 알고 싶다면 비동기 메서드에 대한 또 다른 호출을 promise 체인에 추가 할 수 있습니다 Promise.all()
. 다음과 같이 사용해야 합니다.
db.collection('products').where('id', '==', dbRef).get()
.then(querySnapshot => {
const promises = [];
querySnapshot.forEach(doc => {
const docRef = doc.ref;
promises.push(docRef.update({...}));
})
return Promise.all(promises);
})
.then(...)
수행 할 업데이트가 500 개 미만이라고 확신하는 경우 일괄 쓰기 세트를 사용할 수 있습니다 .
쿼리에 해당하는 문서가 하나만 있다는 것을 알고있는 경우 다음과 같이하십시오.
db.collection('products').where('id', '==', dbRef).get()
.then(querySnapshot => {
const docRef = querySnapshot.docs[0].ref;
return docRef.update({...});
})
마지막으로 Firestore에서 필드를 늘리거나 줄이려면 다음을 사용해야합니다. FieldValue.increment()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다