带startAt和endAt的orderByChild对合并字段不起作用

orderByChild with startAt and endAt is not working for combined field

本文关键字:合并 字段 不起作用 orderByChild startAt endAt      更新时间:2023-09-26

我想用两个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)

这两者的区别是什么?start和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介于145223423和1452234450之间。

也许你应该把你的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)