Firestore选择not null

时间:2018-01-27 19:11:02

标签: javascript firebase google-cloud-firestore

我使用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)

但它不起作用。

我似乎无法使其发挥作用。你能帮帮我吗?

3 个答案:

答案 0 :(得分:22)

Firestore没有"不等于"运营商。但是从逻辑上看,您尝试做的是查询String而不是null的值。如果将字符串传递给where()函数,则Firestore can do that

所以你可以做的是查询低于\uf8ff的值。这是Unicode范围内的一个非常高的代码点。由于它位于Unicode中的大多数常规字符之后,因此该查询将返回类型为String的所有内容:

firestore.collection('employees').where('equipments.${equipm‌​entId}', '<', '\uf8ff')

或者您可以简单地查询高于&#34;&#34;的值。 (空String):

firestore.collection('employees').where('equipments.${equipm‌​entId}', '>', '')

答案 1 :(得分:4)

FWIW由于Firestore索引稀疏[1],因此您可以执行以下操作:

firestore.collection('employees').orderBy('equipments.${equipm‌​entId}')

您将仅获得设置了该字段的文档。但是,如果您在数据库中将字段显式设置为null,则会首先获得空值,因此,如果要避免显式空值,可以执行以下操作:

firestore.collection('employees').orderBy('equipments.${equipm‌​entId}').startAfter(null);

[1]:从某种意义上讲是稀疏的,如果文档中不存在该字段,则Cloud Firestore不会在该文档/字段的索引中创建索引条目。

答案 2 :(得分:1)

我只是检查不存在的文档中的任何字段(例如名为.exists的字段)是否等于