ПРОБЛЕМА с получением одного поля в документе в Firebase Firestore

#firebase #google-cloud-firestore

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

Вопрос:

Я пытаюсь выполнить облачную функцию в Firebase. Изначально я прочитал свой документ. Тогда я бы взял два поля «a» и «b» из этого документа. Затем я хочу установить другое поле моего документа (‘rank’) как сумму ‘a’ и ‘b’. Я не могу найти решение! Я хочу взять только поля «a» и «b» из моего документа. Сохраните их в переменных. И используйте эти переменные для вычисления суммы и задайте результат в поле «ранг».

Я пытался:

 var data = doc.data()
a = data.a
b = data.b
  

но это не работает.

Код:

 export const daicazzo = functions.https.onRequest((request,response)=>{

  const store = admin.firestore();

  //var b;
  store.collection('questions').doc('LD92BBDOihAC3fHDyoV').get().then(doc =>{
    if(doc.exists){
      response.send(doc.data())
    }
    else{
      response.send("Nothing")
    }
  }).catch(reason => {
    console.log(reason)
    response.send(reason)
  })

  store.collection('questions').doc('LD92BBDOihAC3fHDyoV').set({
    rank: //a b
    })
    .then(function() {
      console.log("done");
})
.catch(function(error){
  console.log("Error:",error);
});
});
  

Комментарии:

1. Вы должны записать новое значение обратно в документ. Оно не будет записываться само.

2. Вставьте код из изображения в вопрос, чтобы кто-нибудь мог проверить проблему.

3. @Fire-In-D-Hole Или «вставьте» его.

4. @DougStevenson Приносим извинения за вставленную в код опечатку.

Ответ №1:

Должно выполнить работу (могут быть некоторые лучшие решения)

 const store = admin.firestore();

export const daicazzo = functions.https.onRequest(async (request,response)=>{
   const questionRef = store.doc(`questions/${LD92BBDOihAC3fHDyoV}`)
   const doc = await questionRef.get()
   const foundDoc = doc.exists

   if (foundDoc) {
     // getting both key/value pairs from doc object
     const {a, b} = doc.data()

     const rank = a   b // whatever is your logic...

     // saving the rank in the same document
     await questionRef.update({rank}) // or questionRef.set({rank}, {merge: true})

     if you want to send back the doc with the updated rank without making another read, assuming you handle errors:
     const { id } = doc
     const updatedDoc = { ...doc.data(), id, rank }
     return response.send(updatedDoc)
   } else {
     return response.send("Nothing")
   }
});