Cloud Firestore通过documentID触发查询ID数组

时间:2020-03-22 20:31:42

标签: node.js firebase google-cloud-firestore

我正在尝试编写一个事务,该事务首先从id列表中按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
    })
  })
})

我想在onCreateonUpdate触发器中执行此操作。我应该采取另一种方法吗?

更新

当不使用事务时,错误仍然存​​在,因此与问题无关。

查询为.where(admin.firestore.FieldPath.documentId(), "==", "just_one_doc_id")时不会发生此问题。因此,问题出在使用FieldPath.documentId()in

1 个答案:

答案 0 :(得分:1)

这听起来像是SDK不支持您尝试执行的查询类型。我不知道这是否是故意的。但是,如果您要处理多个文档,并且已经知道它们的所有ID,则可以改用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 })
    })
  })
})