firebase:在firebase中实现模式搜索

 ygluo 发布于 2023-02-08 15:04

我知道WHEREfirebase中没有任何条款.但是我们如何在firebase中实现模式搜索,就像我们在SQL中使用LIKEoperator一样.

我们如何在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的近乎实时的加载速度和强大的查询功能!

1 个回答
  • 想法

    一个近乎解决方案是创建一个数据索引,该索引由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的近乎实时的加载速度和强大的查询功能!

    2023-02-08 15:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有