#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() .