我知道firebase中没有WHERE
子句。但是我们如何在firebase中使用LIKE
运算符在SQL中实现模式搜索。
我们如何在firebase中实现以下sql查询?
SELECT * FROM Customers WHERE City LIKE 's%';
答案 0 :(得分:14)
近乎解决方案是在服务器端NodeJS脚本中创建由City(或您要搜索的其他任何字段)索引的数据索引。
这将不完全复制LIKE
的行为,但是它允许通过城市名称轻松查询,这可以消除对该行为的需要。
这通常是通过NodeJS编写的简单服务器端脚本完成的。想象一下您的用户数据存储在/users/data
中的情况。你的脚本看起来像这样。
var ref = new Firebase("<Your Firebase>.firebaseio.com");
// A Firebase ref where all our users are stored
var userDataRef = ref.child('users/data');
// A Firebase ref which is where we store our index
var byCityRef = ref.child("users/byCity");
// Then bind to users/data so we can index each user as they're added
userDataRef.on("child_added", function (snapshot) {
// Load the user details
var user = snapshot.val();
// Use the snapshot name as an ID (i.e. /users/data/Tim has an ID of "Tim")
var userID = snapshot.name();
// Push the userID into users/byCity/{city}
byCityRef.child(user.city).push(userID);
});
此脚本将创建如下结构:
{
"users": {
"data": {
"Tim": {"hair": "red", "eyes": "green", "city": "Chicago"}
},
"byCity": {
"Chicago": {
"-asd09u12": "Tim"
}
}
}
}
一旦我们将数据编入索引,查询数据很简单,只需两个简单的步骤即可完成。
var ref = new Firebase("<Your Firebase>.firebaseio.com");
var userDataRef = ref.child('users/data');
var byCityRef = ref.child('users/byCity')
// Load children of /users/byCity/Chicago
byCityRef.child('Chicago').on("child_added", function (snapshot) {
// Find each user's unique ID
var userID = snapshot.val();
// Then load the User's data from /users/data/{ID}
userDataRef.child(userID).once(function (snapshot) {
// userID = "Tim"
// user = {"hair": "red", "eyes": "green", "city": "Chicago"}
var user = snapshot.val();
});
});
现在,您具有Firebase的近实时加载速度和强大的查询功能!
答案 1 :(得分:4)
你做不到。您需要手动枚举对象并自行搜索。对于可能没问题的小数据集。但是你要用更大的数据集来燃烧带宽。
Firebase使用优先级支持一些有限的查询功能,但仍然不是您要求的。
他们不支持此类广泛查询的原因是因为它们针对速度进行了优化。您应该考虑更适合搜索的其他服务,例如弹性搜索或传统的RDBMS。
您仍然可以将firebase与其他系统一起使用,以充分利用其优势 - 近乎实时的对象提取和同步。
答案 2 :(得分:1)
我在同一时间,实施“搜索火力基地的可能性” 在他们的网站上,你有两个有趣的帖子:
对于基本查询(如果不是enouth,请参阅第2部分):
第1部分:https://www.firebase.com/blog/2013-10-01-queries-part-one.html
第2部分:https://www.firebase.com/blog/2014-01-02-queries-part-two.html
在第2部分中,讨论如何实现类似sql'如%any%' 在简历中,Firebase本身并不适合复杂的查询,然后建议使用与elasticsearch:elasticsearch.org的补充。 对我来说是困惑的事情,需要很多服务来做一些简单的事情,比如找东西。
Elasticsearch有很多非常有趣的工具 你有需要吗
1:在同一服务器上运行的nodejs脚本
2:运行弹性搜索服务
3:您的应用与客户端进行搜索。