我知道WHERE
firebase中没有任何条款.但是我们如何在firebase中实现模式搜索,就像我们在SQL中使用LIKE
operator一样.
我们如何在firebase中实现以下sql查询?
SELECT * FROM Customers WHERE City LIKE 's%';
Abe Haskins.. 14
想法
一个近乎解决方案是创建一个数据索引,该索引由City(或您要搜索的其他任何字段)在服务器端NodeJS脚本中编制索引.
这不会完全复制行为LIKE
,但是它允许通过City名称轻松查询,这可以消除对该行为的需要.
这通常通过NodeJS编写的简单服务器端脚本完成.想象一下存储用户数据的场景/users/data
.你的脚本看起来像这样.
var ref = new 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(".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的近乎实时的加载速度和强大的查询功能!
一个近乎解决方案是创建一个数据索引,该索引由City(或您要搜索的其他任何字段)在服务器端NodeJS脚本中编制索引.
这不会完全复制行为LIKE
,但是它允许通过City名称轻松查询,这可以消除对该行为的需要.
这通常通过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的近乎实时的加载速度和强大的查询功能!