Firestore обновить документ, если у меня есть ссылка на него?

#javascript #firebase #google-cloud-firestore

# #javascript #firebase #google-cloud-firestore

Вопрос:

Я получаю документ, используя следующий код:

     db.collection("invites")
      .doc(inviteCode)
      .get()
      .then(async (docRef) => {
        // can I update the document I just retrieved here?
}
 

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

 db.collection("invites").doc(inviteCode).set({
            inviteCount: count 1
          });
 

Какова «стоимость» с точки зрения чтения / записи для этого простого случая поиска кода приглашения, а затем обновления счетчика? Есть ли более эффективный шаблон для этого случая?

Спасибо.

Ответ №1:

Могу ли я сделать это напрямую с помощью docRef или мне нужно явно вызвать set()

Вы можете сделать это в любом случае. Ваша переменная docRef не является ссылкой, это DocumentSnapshot . Ссылка DocumentReference на документ находится в свойстве ref моментального снимка.

 db.collection("invites")
    .doc(inviteCode)
    .get()
    .then(snapshot => {
        // snapshot.ref is a DocumentReference to the document
    }
 

snapshot.ref будет тот же объект, что и этот, который не требует запроса:

 const ref = db.collection("invites").doc(inviteCode)
 

Каждый раз, когда вы get() просматриваете документ, это одно чтение. Каждый раз, когда вы set() , это одна запись.

Вы можете увеличить поле более эффективно, не читая документ, используя FieldValue.increment() .