Как получить документ и редактировать данные без повторного вызова db.collection? - PullRequest
0 голосов
/ 12 января 2019

Я хочу получить значение поля, а затем обновить, если оно удовлетворяет условию. Я хотел бы понять, какой путь самый лучший. Например, я установил этот документ (взятый из здесь ):

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 . Спасибо

1 Ответ

0 голосов
/ 12 января 2019

Я решил. Я должен использовать .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");
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...