gpt4 book ai didi

javascript - Firebase .OrderByChild() 不适用于 bool 值

转载 作者:行者123 更新时间:2023-12-03 00:24:27 26 4
gpt4 key购买 nike

我正在要返回的节点中运行查询,这些节点将按包含 bool 值的字段进行排序。根据Firebase Documentation

orderByChild

When using orderByChild(), data that contains the specified child key is ordered as follows:

  1. Children with a null value for the specified child key come first.

  2. Children with a value of false for the specified child key come next. If multiple children have a value of false, they are sorted lexicographically by key.

  3. Children with a value of true for the specified child key come next. If multiple children have a value of true, they are sorted lexicographically by key.

下面是我正在使用的树的 JSON 结构

  "boolsTest" : {
"node1" : {
"truthValue" : true
},
"node2" : {
"truthValue" : false
},
"node3" : {
"truthValue" : true
}
}

然后我在树上运行查询,如下所示

      await admin.database().ref(`boolsTest`).orderByChild("truthValue").once('value').then((value) =>{
console.log("The values retuned by the query: " + JSON.stringify(value));
return value;
}).catch((error) => {
console.log("The error returned: " + JSON.stringify(error));
return error
})
})

结果是无序返回的树元素,顺序为

The values retuned by the query: {"node1":{"truthValue":true},"node2":{"truthValue":false},"node3":{"truthValue":true}}

为什么我的值没有被排序以及如何解决这个问题?谢谢。

最佳答案

当您对 Firebase 数据库执行查询/有序读取时,可能会出现多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

从数据库返回的结果包含三件事:

  1. 每个匹配节点的值
  2. 每个匹配节点的键
  3. 节点在结果中的顺序

当您在快照上调用 .val() 时,它会将这三部分信息转换为 JSON 对象。并且 JSON 对象中键的顺序是未定义的,因此转换会丢失顺序信息。因此,当您将整个结果视为一个大 JSON 对象(就像您的代码那样)时,您会丢失有关订单的信息。

为了防止这种情况,您应该使用 Snapshot.forEach() 循环结果:

await admin.database().ref(`boolsTest`).orderByChild("truthValue").once('value').then((snapshot) =>{
snapshot.forEach((childSnapshot) => {
console.log("Value retuned by the query: " + JSON.stringify(childSnapshot.val()));
})
})

关于javascript - Firebase .OrderByChild() 不适用于 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152166/

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