Как сделать запрос через список документов, а затем обновить значение поля в firebase? - PullRequest
0 голосов
/ 23 сентября 2019

Я хотел бы изменить имя каждого штата, назвавшего boston, в моей коллекции документов в firestore. Как я могу запросить список документов в firestore, а затем изменить имя текущего состояния на новое с помощьюact native?

Я пробовал это

export const Save = ({ NewName }) => {

  var db = firebase.firestore()

  var batch = db.batch();

  var sfDocRef = db.collection("cities").where("state", "==", "boston");
  var sfRe = db.collection("country").doc("SF");

     return () => {

        batch.update(sfDocRef, {"state": NewName})
        batch.update(sfRe, {"state": NewName})

        batch.commit()
  }
}

, но получил эту ошибку

Функция WriteBatch.update () требует, чтобы ее первый аргумент был DocumentReference, но это было:пользовательский объект запроса

1 Ответ

2 голосов
/ 23 сентября 2019

Фактически, sfDocRef - это не DocumentReference, а Query.

Вы должны выполнить запрос сасинхронный метод get() и для каждого документа, возвращенного этим запросом, добавьте его в пакет.Следующий фрагмент кода поможет:

var batch = db.batch();

var sfRe = db.collection("country").doc("SF");

var sfDocQuery = db.collection("cities").where("state", "==", "boston");

sfDocQuery.get().then(querySnapshot => {
    querySnapshot.forEach(doc => {
        batch.update(doc.ref, { "state": NewName });
    });

    //......
    batch.update(sfRe, {"state": NewName});  //This one will work, since sfRe is a DocumentReference
    //......


    return batch.commit()

})
.then(() => {

    //The commit() method is asynchronous and returns a Promise

    //return for your Save function

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...