📜  如何设置 .indexon 超过 1 个 firebase realtim databat (1)

📅  最后修改于: 2023-12-03 15:24:55.025000             🧑  作者: Mango

如何设置 .indexOn 超过 1 个 Firebase Realtime Database

Firebase Realtime Database 是 Firebase 提供的一种云数据库,用于移动和 Web 应用程序。 .indexOn 是 Firebase 数据库规则的一个关键字,用于指定查询索引,从而加快数据的查询速度。在本文中,我们将介绍如何设置 .indexOn 以加快具有多个查询条件的 Firebase 数据库的查询速度。

设置 .indexOn

设置 .indexOn 的最基本方法是在 Firebase 控制台的规则选项中添加一个索引定义。例如,如果我们有以下实时数据库:

{
  "users": {
    "user1": {
      "name": "Alice",
      "age": 25,
      "email": "alice@example.com"
    },
    "user2": {
      "name": "Bob",
      "age": 30,
      "email": "bob@example.com"
    }
  }
}

我们可以添加以下规则以按 name 和 email 属性对数据进行索引:

{
  "rules": {
    "users": {
      ".indexOn": ["name", "email"]
    }
  }
}

此时,我们可以通过以下查询方式来获取 name = "Alice" 且 email = "alice@example.com" 的数据:

firebase.database().ref("users").orderByChild("name").equalTo("Alice").orderByChild("email").equalTo("alice@example.com").once("value", function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var user = childSnapshot.val();
    console.log(user);
  });
});
设置复杂查询

在一些情况下,查询条件可能比上面的示例要复杂得多。例如,我们可能需要为具有多个条件的复杂查询设置索引,如下所示:

firebase.database().ref("users")
  .orderByChild("age")
  .startAt(20)
  .endAt(30)
  .orderByChild("name")
  .equalTo("Alice")
  .once("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var user = childSnapshot.val();
      console.log(user);
    });
  });

在这种情况下,我们需要设置一个复合索引。可以通过继续使用 .indexOn 关键字,并在其中指定嵌套引用路径来完成。

例如,如果要设置上面查询操作的索引,我们可以按以下方式更新规则:

{
  "rules": {
    "users": {
      ".indexOn": [
        "age",
        "name"
      ],
      "$user_id": {
        ".indexOn": [
          "age",
          "name"
        ]
      }
    }
  }
}

在这种情况下,我们还需要在查询操作中指定当前用户的 ID,如下所示:

firebase.database().ref("users")
  .orderByChild("age")
  .startAt(20)
  .endAt(30)
  .orderByChild("name")
  .equalTo("Alice")
  .once("value", function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var user = childSnapshot.val();
      console.log(user);
    });
  });
总结

在本文中,我们介绍了如何设置 .indexOn 来加快具有多个查询条件的 Firebase 数据库的查询速度。我们介绍了如何设置基本和复杂查询的索引,并提供了示例代码来演示如何使用这些索引进行查询。如果您想了解更多关于 Firebase Realtime Database 的信息,请访问 Firebase 文档。