Firebase查询:排除特定字段为null的数据

Dan*_* P. 3 firebase firebase-realtime-database

我有一个查询,它在last_visit字段上使用startAt(1周前)和endAt(现在)在2个日期之间获取数据。

然后,我遍历结果以丢弃没有个人资料图片的用户。

问题是大约有20%的用户拥有个人资料图片,因此仅要使100位用户拥有个人资料图片,我就必须至少查询500个人(我使用limitToLast(500))。

通过某种方式在SQL中指定类似的内容,我可以使查询效率更高:WHERE profile_picture IS NOT NULL吗?

如果可能的话,如果可以只允许那些拥有个人资料图片集的用户,我也可以仅使用limitToLast(100)。

数据库看起来像:

users: {
  {user_uid}: {
     profile_picture: null,
     last_visit: 123456789
  }
  {user_uid}: {
     profile_picture: 'example.com/pic.png',
     last_visit: 123456789
  }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 7

如果要排除不具有属性的项目,则需要查询可能的最大范围的值。

一个简单的例子是:

ref.orderByChild('profile_picture').startAt('!').endAt('~')??
Run Code Online (Sandbox Code Playgroud)

这将捕获大多数由ASCII字符组成的键,因为它!是第一个可打印字符(#33)和~最后一个可打印字符(#126)。请当心这些,因为当您的键由Unicode字符组成时,它们将不起作用。