javascript - 具有 startAt 和 endAt 的 orderByChild 不适用于组合字段

标签 javascript firebase firebase-realtime-database

我想用两个where条件进行查询。我开始知道直接在 firebase 中是不可能的。所以,我采用了下面的方法。将两个属性存储为一个字段并对该字段进行查询。但我没有得到正确的结果。我也收到不匹配的记录,为什么?

await firebase
              .child(child)
              .orderByChild('t_p')
              .startAt(startAt + pId, 't_p')
              .endAt((timestamp - 1) + pId, 't_p')
              .limitToLast(15)

我尝试了以下方法

 await firebase
                  .child(child)
                  .orderByChild('t_p')
                  .startAt(startAt + pId)
                  .endAt((timestamp - 1) + pId)
                  .limitToLast(15)

这两个有什么区别? startat 和 endat 中的第二个选项参数是什么?

我的数据是这样的

{
   t_p: "145343423423_afihad223dadd"
},
{
   t_p: "1453434133323_afihad223dadd"
},
{
   t_p: "145223423423_kkkkaaass"
},
{
   t_p: "145223423450_kkkkaaass"
}

如果我查询

.child(child)
              .orderByChild('t_p')
              .startAt("145223423423_kkkkaaass", 't_p')
              .endAt("145223423450_kkkkaaass", 't_p')
              .limitToLast(15)

我还获得了其他记录。为什么?

最佳答案

这是因为它是按字典顺序排序的,并且 145343423423 位于 145223423423 和 145223423450 之间。

也许您应该将 t_p 存储为 p_t?这样你就会得到这个:

{
   p_t: "afihad223dadd_145343423423"
},
{
   p_t: "afihad223dadd_1453434133323"
},
{
   p_t: "kkkkaaass_145223423423"
},
{
   p_t: "kkkkaaass_145223423450"
}

.child(child)
    .orderByChild('p_t')
    .startAt("kkkkaaass_14522342342")
    .endAt("kkkkaaass_145223423450")
    .limitToLast(15)

您应该尝试以您要访问数据的方式存储数据。

关于javascript - 具有 startAt 和 endAt 的 orderByChild 不适用于组合字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39465962/

相关文章:

javascript - 使用 jquery 定位类

android - 如何为firebase数据库中的所有子数据设置值?

javascript - 如何在 JavaScript 中计算 Firebase 聊天消息中的未读消息

android - 我们可以在通知中发送 Firebase ServerValue 时间戳吗?

ios - Firebase 数据库突然返回 nil

javascript - 在 JavaScript 中将对象传递到数组中

javascript - 如何按值从数组中删除项目?

javascript - 禁用选中/取消选中复选框时的输入

android - 如何获取智能横幅的横幅尺寸?

javascript - 从 Firebase 数据库快照获取元素的键