在Firestore中查询和更新数据的方式

问题描述 投票:1回答:1

我使用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({})之类的东西,但是没有用...在此先感谢

javascript firebase google-cloud-firestore
1个回答
0
投票

您需要按如下所示调用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(...)

© www.soinside.com 2019 - 2024. All rights reserved.