我使用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({})
之类的东西,但是没有用...在此先感谢
您需要按如下所示调用update()
的update()
方法:
DocumentReference
[如果您想知道何时完成所有更新,并可能将对异步方法的另一次调用添加到Promise链,则应使用DocumentReference
,如下所示:
db.collection('products').where('id', '==', dbRef).get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
const docRef = doc.ref;
docRef.update({...});
})
})
请注意,如果您确定要完成的更新少于500个,则可以使用一组Promise.all()
。
如果您知道只有一个文档对应于该查询,请执行以下操作:
Promise.all()
最后,请注意,如果要在Firestore中增加或减少字段,则应使用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(...)