我使用firebase来管理我的项目,我无法使用where子句创建一个查询,其中某些值不为null。
示例:我有一组员工。每个都有一个设备列表作为对象,其中键是设备ID,值是颜色。
user = {
firstName: 'blabla',
lastName: 'bloblo',
equipments: {
123: 'blue',
124: 'red'
}
}
我想让所有在设备中拥有一定设备的员工。让我们说123.
来自Employees的Select *,其中equipment.123不为null。我试过了:
firestore.collection('employees').where(`equipments.${equipmentId}`, '!=', null)
但它不起作用。
我似乎无法使其发挥作用。你能帮帮我吗?
答案 0 :(得分:22)
Firestore没有"不等于"运营商。但是从逻辑上看,您尝试做的是查询String
而不是null
的值。如果将字符串传递给where()
函数,则Firestore can do that。
所以你可以做的是查询低于\uf8ff
的值。这是Unicode范围内的一个非常高的代码点。由于它位于Unicode中的大多数常规字符之后,因此该查询将返回类型为String
的所有内容:
firestore.collection('employees').where('equipments.${equipmentId}', '<', '\uf8ff')
或者您可以简单地查询高于&#34;&#34;的值。 (空String
):
firestore.collection('employees').where('equipments.${equipmentId}', '>', '')
答案 1 :(得分:4)
FWIW由于Firestore索引稀疏[1],因此您可以执行以下操作:
firestore.collection('employees').orderBy('equipments.${equipmentId}')
您将仅获得设置了该字段的文档。但是,如果您在数据库中将字段显式设置为null
,则会首先获得空值,因此,如果要避免显式空值,可以执行以下操作:
firestore.collection('employees').orderBy('equipments.${equipmentId}').startAfter(null);
[1]:从某种意义上讲是稀疏的,如果文档中不存在该字段,则Cloud Firestore不会在该文档/字段的索引中创建索引条目。
答案 2 :(得分:1)
我只是检查不存在的文档中的任何字段(例如名为.exists的字段)是否等于