gpt4 book ai didi

javascript - firebase实时数据库.orderByChild未返回正确的顺序

转载 作者:行者123 更新时间:2023-11-28 03:14:33 25 4
gpt4 key购买 nike

我正在使用 firebase,我想通过 q​​uoteID 排序结果。但是 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

最佳答案

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

  1. 它的关键。
  2. 它的值(value)。
  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());
})
})

关于javascript - firebase实时数据库.orderByChild未返回正确的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com