我正在尝试使用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"
      }
    }
  }
}


我希望获取在DueDate已通过的所有“注释”。

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为四个返回的对象中的三个记录“ False”。

我可以进行比较,仅处理符合我的条件的对象,但这会违背目的。

我已经在[“ notes \ data \ alertDate”]上为数据库建立索引。

我想念什么?我一定以某种方式曲解了文档。 :)

最佳答案

您的dueDate属性嵌套在data下,因此您需要按data/dueDate进行寻址:

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


您可能要同时包含startAt()endAt()子句,并且startAt()的值应该是合理的,而endAt()已经使用的特定值。

10-06 11:59