如何使用firebase查询语法中的值传递变量

问题描述 投票:0回答:2

我试图使用JavaScript获取书籍值并存储在名为“bookName”的变量中,现在它具有十进制值124562.此十进制值表示一些书籍详细信息。

现在问题在于firebase我做了一个数据建模,一个名为“books”的节点,在那里有不同的细节,如:

书名:tcp / ip

书号:124562

书页:300

问题是如何在firebase中获取它将比较书籍节点下的不同书籍的查询并获取书号124562的详细信息?

您以视频或事件语法的形式提供的帮助将会很有帮助。

我也查了一下,语法

UserRef.orderByChild('books').equalTo(value).on('child-added',function(snap){
console.log(snap.val());
)};
javascript firebase firebase-realtime-database
2个回答
0
投票

在firebase查询中,您可以一次基于一个参数进行查询,因此如果您想要获取名称以“tcp”开头的书籍,您可以像这样查询

userRef.child("books").orderByChild("name")
    .startAt(queryText).endAt(queryText+"\uf8ff").once("value")

包含书页:

userRef.child("books").orderByChild("name")
        .startAt(fromPageNumber).endAt(toPageNumber).once("value")

这里也有类似的答案:How to do a simple search in string in Firebase database?

查看文档:

https://firebase.google.com/docs/database/admin/retrieve-data#section-queries

如果在查询中包含多个参数等更复杂的查询,则需要使用第三方解决方案,如弹性搜索。


0
投票

假设您在数据库中的/books下有这个JSON:

"books": {
  "-Lsdfkfdskgdskg1": {
    "name": "tcp/ip"
    "number": 124562
    "pages": 300
  },
  "-Lsdfkfdskgdskg1": {
    "name": "some other name"
    "number": 987654
    "pages": 120
  }
}

您可以使用以下方式查询:

var booksRef = firebase.database().ref("books");
booksRef.orderByChild('number').equalTo(124562).on('child_added',function(snap){
    console.log(snap.val());
)};

代码中的更改:

  • 创建对所有书籍的引用,然后按number排序并过滤
  • 这是child_added_

请注意,您的图书似乎已拥有自己的唯一ID。在这种情况下,在JSON中存储该ID下的书籍会更有效:

"books": {
  "124562": {
    "name": "tcp/ip"
    "pages": 300
  },
  "987654": {
    "name": "some other name"
    "pages": 120
  }
}

现在您无需查询即可加载该书:

booksRef.child("124562").on('value',function(snap){
    console.log(snap.val());
)};

添加更多书籍时查询会变慢。但是使用这种JSON结构,您可以根据其ID直接访问该书的数据,该ID可以更好地扩展。

© www.soinside.com 2019 - 2024. All rights reserved.