查询特定数组字段中是否存在值-集合中的所有文档

时间:2020-06-12 03:34:55

标签: javascript google-cloud-firestore

集合结构:

users >
  name: 'John'
  phoneNumbers: ['12345', '67891']

如何检查任何电话号码字段中是否存在给定的电话号码(例如:999999)? 我尝试过:

const usersRef = await firestore().collection('users')

const dbResponse = usersRef.where('phoneNumbers', 'array-contains', '999999')

这会给我返回一个以"_collectionPath": ...开头的巨大对象

我期待布尔值的存在,但没有找到。我的查询错了吗?

1 个答案:

答案 0 :(得分:1)

完全执行任何查询时,您将返回一个包含与查询匹配的每个文档的QuerySnapshot。没有其他方法可以查询Firestore,并且您的代码将需要处理该QuerySnapshot对象。

找出是否有任何文档与查询匹配而无需查看每个文档快照的最简单方法是简单地检查QuerySnapshot的size属性是否大于0。

顺便说一句,您对await的使用不正确。 firestore().collection('users')无须立即返回CollectionReferencewhere()将返回查询对象。并且get()将返回带有QuerySnapshot的Promise:

const usersRef = firestore().collection('users')
const querySnapshot = await usersRef
    .where('phoneNumbers', 'array-contains', '999999')
    .get()
if (querySnapshot.size > 0) {
    // do something
}

我建议研究documentation,以获取有关如何执行查询的更多详细信息。