【问题标题】:AngularFire2 querying by multi-valueAngularFire2通过多值查询
【发布时间】:2017-09-21 20:30:16
【问题描述】:

我是 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 来解决这个问题?
谢谢。

【问题讨论】:

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


【解决方案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.
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多