当前位置:  开发笔记 > 编程语言 > 正文

Firebase - 如何编写多个orderByChild来提取数据?

如何解决《Firebase-如何编写多个orderByChild来提取数据?》经验,为你挑选了2个好方法。

Firebase - 如何编写多个orderByChild来提取数据?

我正在寻找数据,其中2个字段与我传入的字段相同.

这是我的代码示例:

this.refApp
  .orderByChild('userUid')
  .startAt(uid).endAt(uid)
  .orderByChild('jobId')
  .startAt(jobId).endAt(jobId)
  .on('value', (snap) => {
     //This currently doesn't get returned.
  });   

在上面的例子中,我没有得到任何编译器错误,代码似乎很好.但是,我对数据进行了硬编码,以便返回uid和jobid等于的对象.

我可以让这个为一个orderByChild工作但是当我像上面那样做两个时它似乎什么都不做.

我正在使用typescript,angular2和firebase.

有任何想法吗?



1> David East..:

您只能使用一种订购方法.

要查询更多信息,您需要重新考虑数据结构.您当前的结构可能看起来像这样:

{
  "key": {
     "id_1": {
        "userUid": "user_1",
        "jobId": "job_1"
     },
     "id_2": {
        "userUid": "user_1",
        "jobId": "job_2"
     },
     "id_3": {
        "userUid": "user_2",
        "jobId": "job_3"
     }
  }
}

使用此结构,您只能使用一个子键索引.

现在考虑这个结构:

{
   "key": {
      "user_1": {
         "id_1": {
            "jobId": "job_1",
            "userUid": "user_1"
         },
         "id_2": {
            "jobId": "job_2",
            "userUid": "user_1"
         }
      }
      "user_2": {
         "id_3": {
            "jobId": "job_3",
            "userUid": "user_2"
         }
      }
   }
}

此结构显式创建索引uid.所以现在如果你想通过用户获得所有工作,你可以编写这个查询:

var ref = new Firebase('');
var uid = 'user_1';
var userRef = ref.child('key').child(uid);
var query = userRef.orderByChild('jobId');
query.on('value', (snap) => console.log(snap.val());



2> 小智..:

orderByChild在Firebase中进行多种计算的另一种方法是创建orderKey。

假设您的基地中有这个:

{
    userId: {
        firstName: 'Snow',
        lastName: 'Jon',
        birthYear: 283
    }
}

您要查询: userRef.orderByChild('firstName').equalTo('Jon').orderByChild('lastName').equalTo('Snow')

您需要像这样在用户上创建密钥:

{
    userId: {
        firstName: 'Snow',
        lastName: 'Jon',
        birthYear: 283,
        orderName: 'JonSnow'
    }
}

因此,您可以这样查询: userRef.orderByChild('orderName').equalTo('JonSnow')

这也适用于startAtendAt,如果你想查询所有的雪出生在一个范围之久。首先创建密钥:

{
    userId: {
        firstName: 'Snow',
        lastName: 'Jon',
        birthYear: 283,
        orderNameYear: 'Snow283'
    }
}

这样就可以查询: userRef.orderByChild('orderNameYear').startAt('Snow280').endAt('Snow285')

这将返回出生在280和285之间的所有Snow。

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有