Запускает облачный пожарный магазин по documentID для массива идентификаторов - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь записать транзакцию, которая сначала запрашивает документы по documentId из списка идентификаторов, а затем делает некоторые обновления.

Я получаю сообщение об ошибке:

Соответствующий значение для FieldPath.documentId () должно быть строкой или DocumentReference.

Например:

const indexArray = [..list of doc ids...]
const personQueryRef = db.collection("person").where(admin.firestore.FieldPath.documentId(), "in", indexArray)

return db.runTransaction(transaction => {
  return transaction.get(personQueryRef).then(personQuery => {
    return personQuery.forEach(personRef => {
      transaction.update(personRef, { ...update values here })
      //more updates etc
    })
  })
})

Я хочу сделать это в onCreate и onUpdate вызывать. Есть ли другой подход, который я должен использовать?

Обновление

Ошибка по-прежнему сохраняется, когда не используется транзакция, поэтому это не связано с проблемой.

Проблема не возникает при запросе .where(admin.firestore.FieldPath.documentId(), "==", "just_one_doc_id"). Итак, проблема в использовании FieldPath.documentId() и in.

1 Ответ

1 голос
/ 23 марта 2020

Похоже, тип запроса, который вы пытаетесь выполнить, не поддерживается SDK. Является ли это намеренным или нет, я не знаю. Но если вы хотите работать с несколькими документами, и вы уже знаете все их идентификаторы, вы можете использовать getAll (...) вместо:

// build an array of DocumentReference objects
cost refs = indexArray.map(id => db.collection("person").doc(id))

return db.runTransaction(transaction => {
  // pass the array to getAll()
  return transaction.getAll(refs).then(docs => {
    docs.forEach(doc => {
      transaction.update(doc.ref, { ...update values here })
    })
  })
})

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