AngularFire2通过多值查询

时间:2017-09-21 20:30:16

标签: angular firebase firebase-realtime-database ionic3 angularfire2

我是Firebase的新手,我在进行任何简单的数据库操作时遇到很多问题 我需要使用更多属性过滤一组数据。这是我的Firebase实时数据库:

  "items" : {
    "-KuJdzzI82tnp1etnR0E:" : {
      "dateEnd" : 1506356341284,
      "dateStart" : 1505751541284,
      "enabled" : 0,
      "title" : "cat"
    },
    "-KuKeCwPtkH_Ub9YMq4C:" : {
      "dateEnd" : 1505665110444,
      "dateStart" : 1505146710444,
      "enabled" : 1,
      "title" : "wolf"
    },
    "-KuKeD1evhc4mw2njQqV:" : {
      "dateEnd" : 1506961268244,
      "dateStart" : 1506442868244,
      "enabled" : 0,
      "title" : "fish"
    }
  }

如果时间戳在dateStart和dateEnd之间,并且如果启用=“1”,我必须使用title =“wolf”提取元素。
我在AngularFire2文档中读到了查询列表的可能性,但唯一的例子是带有“orderByChild”和“equalTo”组合的单个过滤器属性。
是否可以使用AngularFire2来解决这个问题? 谢谢。

1 个答案:

答案 0 :(得分:1)

您无法向同一查询添加两个过滤器。您需要对预期的较小数据集进行查询,然后过滤掉结果。

const results = []; // Results

this.db.list('/items', { query: {
    orderByChild: 'title',
    equalTo: 'wolf'
}}).subscribe(items => {
    const startTime = 0; // Some start time
    const endTime = 1; // Some end time

    items.forEach(item => {
        if (item.dateEnd < endTime && item.startTime > startTime) {
            results.push(item);
        }
    });

    // `results` will now be filled with the items.
})