如何获取文档并编辑数据而无需再次调用db.collection?

时间:2019-01-12 13:36:10

标签: javascript firebase google-cloud-firestore

我想获取一个字段的值,然后在满足条件时进行更新。我想了解哪种是最好的方法。例如,我设置了此文档(取自here):

db.collection('cities')
  .doc('LA')
  .set({
    name: 'Los Angeles',
    state: 'CA',
    country: 'USA',
    numberOfRestaurant: 100
   });

我想将numberOfRestaurant的值减少1。假设它在函数内部。

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) {
    var numberOfRestaurant = doc.get('numberOfRestaurant');
    if (numberOfRestaurant > 0)
      db.collection('cities')
        .doc('LA')
        .update({ numberOfRestaurant: numberOfRestaurant - 1 });
    else 
      alert("Can't set negative number");
   });  

这样,我两次调用db.collection。是否可以使用querySnapshot对象来更新值,而无需再次调用db.collection。这样的事情(我知道这种方式会产生错误):

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) {
    var numberOfRestaurant = doc.get('numberOfRestaurant');
      if (numberOfRestaurant > 0) 
         doc.update({ numberOfRestaurant: numberOfRestaurant - 1 });
      else 
        alert("Can't set negative number");
   });

Api Reference .get()返回DocumentSnapshot。 谢谢

1 个答案:

答案 0 :(得分:1)

我解决了。我必须使用.ref返回一个DocumentReference,该引用指向Firestore数据库中的文档位置。

db.collection('cities')
  .doc('LA')
  .get()
  .then(function(doc) {
    var numberOfRestaurant = doc.get('numberOfRestaurant');
      if (numberOfRestaurant > 0) 
         doc.ref.update({ numberOfRestaurant: numberOfRestaurant - 1 });
      else 
        alert("Can't set negative number");
   });