【问题标题】:How to filter firebase data based on timestamp using startAt & endAt如何使用 startAt 和 endAt 根据时间戳过滤 Firebase 数据
【发布时间】:2019-07-12 14:45:27
【问题描述】:

我正在尝试使用 startAt 和/或 endAt 过滤 Firebase 数据。 我的数据结构如下。

{
  "notes" : {
    "-LOs0Ikx4ydM5RatREM1" : {
      "data" : {
        "dueDate" : 1561629600000,
        "description" : "Korewa nan desuka?!",
        "createdAt" : 1539611900000,
        "title" : "First "
      },
      "members" : {
        "author" : "1212121212121212121212121212"
      }
    },
    "-LOs0Ikx4ydM5RatREM2" : {
      "data" : {
        "dueDate" : 4004870448000,
        "description": "Test"
        "createdAt" : 1539611900000,
        "title" : "Second"
      },
      "members" : {
        "author" : "1212121212121212121212121212"
      }
    },
    "-LhBt9msLFKqUQ-koI9W" : {
      "data" : {
        "dueDate" : 1564653600000,
        "description" : "abc",
        "createdAt" : 1560363158279,
        "title" : "August 1"
      },
      "members" : {
        "author" : "3434343434343434343434343434"
      }
    },
    "-LhBtKdDrQv9eKuYdfCi" : {
      "data" : {
        "dueDate" : 1564653600000,
        "description" : "abcdef",
        "createdAt" : 1560363158279,
        "title" : "August 2"
      },
      "members" : {
        "author" : "3434343434343434343434343434"
      }
    }
  }
}

我希望获取到期日期已过的所有“笔记”。

const now = moment().valueOf() //Eg. 1561629500000
database.ref('notes/')
  .orderByChild("dueDate")
  .endAt(now)
  .once("value", (snapshot) => {
    console.log('Process expired notes')
    snapshot.forEach( (data) => {
      const obj = data.val()
      console.log('Date comparison:', (now >= obj.data.alertDate))
      ...

上面的代码不起作用,它返回示例 JSON 中的所有对象。 console.log 为四分之三的返回对象记录“假”。

我可以进行比较,只处理符合我标准的对象,但这会破坏目的。

我已在 ["notes\data\alertDate"] 上为数据库编制索引。

我错过了什么?我一定以某种方式误解了文档。 :)

【问题讨论】:

  • 你能用你数据库中实际 JSON 的 sn-p 替换数据库结构吗?您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
  • 感谢 Frank 的及时回复! :) 我已经更新了 JSON sn-p。返回 sn-p 中的所有对象。

标签: javascript firebase-realtime-database


【解决方案1】:

您的dueDate 属性嵌套在data 下,因此您需要寻址为data/dueDate

database.ref('notes')
  .orderByChild("data/dueDate")

您可能希望同时包含 startAt()endAt() 子句,为 startAt() 提供一个合理的值,并为 endAt() 使用您已经使用的特定值。

【讨论】:

  • 当然!非常感谢! :D 感谢您的提示-我还将包括 startAt()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多