Увеличить значение поля с помощью QuerySnapshot

#javascript #google-cloud-firestore

#javascript #google-облако-firestore

Вопрос:

Я пытаюсь выполнить запрос к коллекции, и если документ существует, я хочу увеличить счетчик. Это для отслеживания количества обращений. К сожалению, следующий код не работает, и я не уверен, возможно ли то, что я пытаюсь сделать. Я пытаюсь минимизировать чтение Firestore.

 db = firebase.firestore(admin);
var users = db.collection("users");
var query = users
  .where("userid", "==", userid)
  .get()
  .then(function(querySnapshot) {
    if (querySnapshot.size > 0) {
      var docRef = querySnapshot.docs[0];

      // does not work
      const increment = firebase.firestore.FieldValue.increment(1);
      docRef.update("accessCount", increment);

      // also does not work
      var theDoc = db.collection("users").doc(docRef.id);
      console.log(theDoc);
      const increment = firebase.firestore.FieldValue.increment(1);
      theDoc.update("accessCount", increment);
    }
  })  

Обратите внимание, я получаю действительный docRef, но, похоже, я ничего не могу с этим поделать, кроме как получить данные изнутри … спасибо.

Ответ №1:

Проблема начинается здесь:

 var docRef = querySnapshot.docs[0];
  

Здесь вы получаете не ссылку на документ, а снимок документа. При последующем вызове docRef.update() это не сработает, потому что у a DocumentSnapshot нет update метода. На самом деле вы должны получать там сообщение об ошибке, которое также предотвращает выполнение остальной части вашего кода.

Что-то вроде этого должно работать:

 if (querySnapshot.size > 0) {
  var docRef = querySnapshot.docs[0].ref;
  docRef.update("accessCount", firebase.firestore.FieldValue.increment(1));
}