我遇到了firebase的“IN”限制10。虽然这里已经回答了一个变通方案:
Is there a workaround for the Firebase Query "IN" Limit to 10?
该线程中的所有解决方案似乎都不适用于侦听器“onSnapshot”。对于我的用例(Vue 3),我有一个可组合的/函数调用I,它查询在一个数组中传递的Firebase,该数组最多可以有100个文档ID值,并返回一个对象,如下所示。
这可能吗?
import { ref, watchEffect } from 'vue'
import { db } from '@/firebase/config'
import { collection, onSnapshot, query, where, documentId } from 'firebase/firestore'
const getUsersList = (idList) => {
// idList is an array of document ID's
const documents = ref(null)
let collectionRef = collection(db, 'users')
collectionRef = query(collectionRef, where(documentId(), 'in', idList))
// this fails if I pass in more than 10 elements in the array
const unsub = onSnapshot(collectionRef, snapshot => {
let results = []
snapshot.docs.forEach(doc => {
results.push({ ...doc.data(), id: doc.id })
})
// update values
documents.value = results
})
watchEffect((onInvalidate) => {
onInvalidate(() => unsub())
})
return { documents }
}
export default getCollectionRt
1条答案
按热度按时间qacovj5a1#
您必须初始化多个监听器,即相同数量的查询,但使用
onSnapshot()
(可能比为每个文档设置一个监听器更好)。dataLoaded
标志检查监听器是否第一次获取数据或接收到更新。我使用了一个Map,其中的键是文档ID,因此它可以很容易地删除,但请将其更改为数组或任何其他所需的结构。