【问题标题】:firebase realtime database .orderByChild not returning correct orderfirebase实时数据库.orderByChild没有返回正确的顺序
【发布时间】:2020-01-15 15:01:09
【问题描述】:

我正在使用 firebase,我想按 quoteID 排序我的结果。但是 orderbychild 没有按预期返回列表中的第一项或最后一项。

this.props.firebase.db.ref('quotes').orderByChild("quoteId").limitToFirst(1).once("value", snapshot => {
  const entry = snapshot.val();

  console.log(entry);


})

我的数据结构如下:

{
  "1ec658d2-a7cb-45b8-8d9b-9c2a6783365d" : {
    "dateCreated" : "2019-12-02T16:06:50+01:00",
    "owner" : "DVRVSpeOXQV6wAmHAdpAe6iPQ5i2",
    "quoteID" : "200115001",
    "timeStamp" : 2075985276
  },
  "3e95a6ba-df85-4dbb-97b0-cf36df068bc1" : {
    "dateCreated" : "2019-09-27T09:17:58+02:00",
    "owner" : "xZBFCq4ho3V2G8dZTvK7RjsnTr43",
    "quoteID" : "200115002",
    "timeStamp" : 1
  },
  "d95d1f32-804b-4625-8f7e-e0bfb4f032e6" : {
    "dateCreated" : "2019-12-10T14:39:40+01:00",
    "projectName" : "testPropject timestamp2",
    "quoteID" : "191210000",
    "timeStamp" : 1575985180
  }
}

我得到作为第一个单项返回的 qouteID '200115001' 的条目。我不明白为什么不按文档中所述的字典顺序首先返回“191210000”

https://firebase.google.com/docs/database/web/lists-of-data#data-order

【问题讨论】:

  • 您查询的是“orderByChild("quoteId") 而不是“quoteID”。它可能区分大小写

标签: javascript firebase ecmascript-6


【解决方案1】:

您从 Firebase 获得的快照包含每个匹配子节点的 3 条信息:

  1. 它的关键。
  2. 它的价值。
  3. 它与其他返回的子节点的相对位置。

当您调用snapshot.val() 时,此数据将转换为简单的 JSON 对象。在那个对象中,只有两条信息的位置:键和值。 JSON 对象中键的顺序未定义,因此当您调用 snapshot.val() 时,结果的顺序会丢失。

要保持顺序,请使用snapshot.forEach() 遍历子节点。像这样的:

this.props.firebase.db.ref('quotes').orderByChild("quoteId").limitToFirst(1).once("value", snapshot => {
  snapshot.forEach((child) => {
    console.log(child.key);
    console.log(child.val());
  })
})

【讨论】:

  • 嗨@frank-van-puffelen,感谢您的回复。我试过你的sn-p,但是,我仍然得到意想不到的结果。由于我使用 .limitToFirst(1) 从数据库中仅返回 1 个值,因此我希望这是有序(按 'quoteID' )列表中的第一个值。但是,排序似乎将“200115002”放在“200115001”或“191210000”之前
  • 嗯....我误读了您的问题。但是当我尝试重现它似乎对我来说很好:jsbin.com/pumijoz/edit?js,console
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
相关资源
最近更新 更多