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

时间:2016-09-13 08:55:52

标签: javascript firebase firebase-realtime-database

我想用两个条件查询。我开始知道它不可能直接在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)

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

1 个答案:

答案 0 :(得分:1)

这是因为它以词汇形式订购,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)

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