firebase 相当于 sql where in ()

Posted

技术标签:

【中文标题】firebase 相当于 sql where in ()【英文标题】:firebase equivalent to sql where in () 【发布时间】:2015-04-10 11:18:19 【问题描述】:

我需要一个与 SQL 中的此查询等效的 firebase 查询:

select * from your_table where id in (123, 345, 679)

您将如何在 firebase 中执行此逻辑?

谢谢,

【问题讨论】:

【参考方案1】:

Firebase 的查询没有 ORIN 运算符。因此,您无法轻松地将上述查询映射到 Firebase。

一种解决方法是实现一个简单地循环元素的函数:

function loadThese(ids, callback) 
  var rows = [];
  while (ids.length > 0) 
    var id = ids.splice(0,1)[0];
    refToTable.child(id).once('value', function(snapshot) 
      rows.push(snapshot.val());
    );
  
  callback(rows);

请注意,以上内容可能是递归的,因此请使用它来获取灵感,而不是复制/粘贴代码。

解决问题的另一种(可能是更好的方法)是找出为什么选择这三行以及为什么不选择其他行。这些行可能有一些共同点。一旦您了解了它们的共同点,您就可以将其建模到数据结构中。

更新 (20160408):关于为什么上述在 Firebase 上比您预期的要快得多的原因,请参阅 this answer。

【讨论】:

弗兰克,谢谢您的回答...我正在使用 geofire,我认为按照您的建议进行操作效率不高。 geoQuery.on("key_entered", function(key, location, distance) ref.child("tikis").child(key).once("value", function(snap) // 用 snap 做事 .

以上是关于firebase 相当于 sql where in ()的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase where query arrayContains in List [重复]

三:动态SQL

2017-03-12SQL Sever 子查询聚合函数

sql中=all和 in的区别

mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

sql中,In和where的区别是什么