2016-09-13 1 views
0

Я хочу запросить с двумя условиями условия. Я узнал, что это невозможно прямо в firebase. Итак, я использую следующий метод. Сохранение двух свойств в качестве одного поля и запросов в этом поле. Но я не получаю правильный результат. Я тоже получаю несоответствующие записи, почему?orderByChild с startAt и endAt не работает для комбинированного поля

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) 

В чем разница между этими двумя? Что такое второй параметр param в 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) 

Я получаю другие записи, а также. Зачем?

+0

По * другим записям *, вы имеете в виду 't_p:" 145343423423_afihad223dadd "'? –

+0

@AL. Да, это правильно – user43286

+1

Не используйте второй аргумент в .startAt (startAt + pId, 't_p') '. Это обычно неправильно понимают и не помогут. Помимо этого вы можете воспроизвести проблему в jsbin, чтобы я мог посмотреть (и не нужно будет размышлять о значениях 'startAt',' pId' и 'timestamp')? –

ответ

0

Это потому, что он заказал lexographically и 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) 

Вы должны попытаться сохранить данные так, как вы собираетесь получить к нему доступ.

Смежные вопросы