我有一个查询,在last_visit字段上使用startAt(1周前)和endAt(now)在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
}
}
答案 0 :(得分:4)
如果您尝试排除没有财产的项目,则需要查询最广泛的值。
一个简单的例子是:
ref.orderByChild('profile_picture').startAt('!').endAt('~')
这将捕获大多数由ASCII字符组成的键,因为!
是第一个可打印字符(#33),~
是最后一个可打印字符(#126)。小心这些,因为当你的密钥由unicode字符组成时,它们不会工作。