Firebase 'not-in'操作符查询失效问题求助
问题原因及解决办法
- 你用的
not-in逻辑不对:Firestore里not-in是判断字段值本身不在指定列表中,但你的read_by是数组类型,数组和单个user.uid字符串永远不相等,所以这个条件相当于没起作用,自然会返回所有文档。 - 要查询数组不包含某个元素,得用
not-contains操作符,这才是Firestore专门用来检查数组元素的逻辑。
修正后的代码:
const q = query(messagesRef, where('read_by', 'not-contains', user.uid)) const docs = await getDocs(q) // 要统计数量直接取docs.size即可 const unreadCount = docs.size
补充提醒:
contains/not-contains仅支持检查数组中的单个元素,无法同时校验多个元素;- 如果
read_by是空数组,这个查询也会把这类文档算进来,逻辑上是对的——空数组确实不包含目标用户ID。
内容的提问来源于stack exchange,提问作者jhnxx
相关产品推荐
相关产品推荐

