2016-08-17 3 views
1

Я пытаюсь использовать второй аргумент equalTo(value, key) при использовании orderByPriority(), как documented here.Firebase orderByPriority используется с equalTo странное поведение

Проблема заключается в том, что результаты несовместимы при использовании этого второго аргумента key.


Пример набора данных

items 
    key1 
    key2 
    key3 
    key4 

Все детали имеют одинаковый приоритет: 10 (это только для примера, в моем приложении есть и другие элементы с другими приоритетами)


При получении следующего запроса Firebase, чтобы получить первые два элемента с таким приоритетом:

dbRef.child('items').orderByPriority().equalTo(10).limitToFirst(2) 

я получаю следующие - ожидаемые - результаты:

{ "key1": ..., "key2": ... } 

Тогда я стараюсь, чтобы получить результаты после key2 пункта, как описано в документации:

dbRef.child('items').orderByPriority().equalTo(10, 'key2').limitToFirst(2) 

Результат довольно странный, всегда есть только один элемент, один с предоставленным ключом:

{ "key2": ... } 

Что я ожидал, что это два результата начиная с или после ключ, предоставленный, так

{ "key2": ..., "key3": ... } 

Или

{ "key3": ..., "key4": ... } 

Вопрос

Как использовать фильтр equalTo() со вторым аргументом?


Казалось, этот вопрос был already asked, но он не получил ни одного ответа ...

ответ

1

equalTo (фильтр) будет получить только элементы точно соответствующие заданному ключу. Если вы хотите начать с «key2» и получить несколько после этого, используйте фильтр startAt(). Однако вы не можете использовать несколько операторов orderBy в одном запросе, поэтому вам может потребоваться переформатировать ваш код. Я бы рекомендовал вам сохранить предметы по желаемому приоритету. Затем вы можете запросить эту группу элементов, используя фильтр startAt(). Heres набор данные:

items10 
    key1 
    key2 
items9 
    key1 
    key2 

В фильтре startAt(), необходимо указать начальный ключ, а затем он будет запрашивать для любого ключа с той же или более высокой стоимостью.Вот ссылка на документы для этой функции: startAt().

Используя этот метод, limitToFirst (2) должен предоставить вам key2 и key3. Вот пример кода, с использованием приоритета 10.

dbRef.child('items10').orderByKey().startAt('key2').limitToFirst(2) 

Примечание: Вы можете также необходимо просто захватить элемент, не зная его приоритет. Для этого создайте еще один ключ, называемый элементами, который содержит только все ключи (вы не использовали бы это для запросов).

+0

Это не работает: 'Ошибка: Query.orderByKey: вы не можете комбинировать несколько вызовов orderBy'. Кроме того, где вы видели, что фильтр 'equalTo()' получит только элемент, соответствующий ключу? Документы говорят: «Детский ключ для начала, среди детей с указанным ранее приоритетом». – Pandaiolo

+0

Это моя ошибка. Я редактировал свой пост, посмотрю. –

+0

И чтобы ответить на ваш вопрос, вам разрешено фильтровать только одно значение. Это просто характер запросов Firebase –

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