首页 > 解决方案 > 如何在不再次调用 db.collection 的情况下获取文档和编辑数据?

问题描述

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

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

我想将 的值减少 1 numberOfRestaurant。假设这是在一个函数内部。

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 2 次。是否可以使用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。谢谢

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我解决了。我必须使用 .ref 来返回DocumentReference指向 Firestore 数据库中文档位置的 a。

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");
   });

推荐阅读