【问题标题】:How to get a document and edit data without calling db.collection again?如何在不再次调用 db.collection 的情况下获取文档和编辑数据?
【发布时间】:2019-01-12 13:36:09
【问题描述】:

我想获取一个字段的值,然后在它满足条件时进行更新。我想了解哪种方法最好。比如我设置了这个文档(取自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 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。 谢谢

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    我解决了。我必须使用返回 DocumentReference 的 .ref,它引用 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");
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-25
      • 2019-02-19
      • 2021-08-02
      • 1970-01-01
      • 2023-04-10
      • 2016-08-14
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多