【问题标题】:Firebase query: exclude data where a specific field is nullFirebase 查询:排除特定字段为空的数据
【发布时间】:2016-08-25 22:57:15
【问题描述】:

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

然后我循环遍历结果以丢弃没有头像的用户。

问题是大约 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
  }
}

【问题讨论】:

  • ref.orderByChild('profile_picture').startAt('a').endAt('z~')?
  • 是的,现在使用它:-) 谢谢

标签: firebase firebase-realtime-database


【解决方案1】:

如果您尝试排除没有属性的项目,则需要查询可能范围最广的值。

一个简单的例子是:

ref.orderByChild('profile_picture').startAt('!').endAt('~')‌​

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

【讨论】:

  • 我收到以下错误:firebase.ref('users').orderByChild('instagram').startAt('!')‌​.endAt('~').once('value') SyntaxError: Invalid or unexpected token at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:152:10) at Module._compile (module.js:624:28) at Object.Module._extensions..js (module.js:671:10) at Module.load (module.js:573:32) at tryModuleLoad (module.js:513:12) at Function.Module._load (module.js:505:3) at Function.Module.runMain (module.js:701:10) at startup (bootstrap_node.js:194:16) at bootstrap_node.js:618:3
  • 在没有看到minimal complete verifiable example 的情况下,无法说出您为什么会得到它。我强烈建议为此提出一个新问题。
  • database.push 函数是否总是创建 ASCII 键? @Frank van Puffelen
  • push() 生成的键确实总是 ASCII。但是,如果您还想搜索非 ASCII 字符,请确保使用比 ~ 更合适的内容。最常见的值是\uf8ff,这是已知的最高 unicode 代码点。参见例如stackoverflow.com/a/38562161
猜你喜欢
  • 2022-06-10
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2010-09-28
  • 1970-01-01
相关资源
最近更新 更多