Firebase: запрос для исключения данных на основе условия

Я могу получить данные для определенного значения в child, используя orderByChild и equalTo (classно, что он работает и для вложенного ребенка)

 private void getData() { try { final DatabaseReference database = FirebaseDatabase.getInstance().getReference(); database.child(Constants.TABLE_TASKS).orderByChild("user/id") .equalTo("somevalue") .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Timber.d(dataSnapshot.toString()); } @Override public void onCancelled(DatabaseError databaseError) { } }); } catch (Exception ex) { ex.printStackTrace(); } } 

Есть ли простой способ получить данные, где определенное значение не найдено, в основном что-то вроде notEqualTo("somevalue") ?

В модели Query Firebase вы не можете фильтровать для неравенства значение .

Но вы можете проверить отсутствие какой-либо ценности (по существу: отсутствие собственности). Например, с этой моделью данных:

 { child1: { "user": { "id": 1, "name": "puf" } }, child2: { "user": { "id": 2, "name": "abe" } }, child3: { "user": { "id": 3 } } } 

Я могу запросить детей без имени user/name с помощью:

 ref.orderByChild('child/name').equalTo(null) 

Это приводит к единственному ребенку, у которого нет имени:

child3

Не стесняйтесь играть с моим jsbin, чтобы увидеть, если вы подойдете дальше: http://jsbin.com/liyibo/edit?js,console

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

Я думаю, что нашел решение, и это больше похоже на то, как должна быть создана firebase database, и на самом деле теперь я понял намерение, лежащее в основе руководства Firebase

https://firebase.google.com/docs/database/android/structure-data

Оригинальный дизайн:

 { child1: { "user": { "id": "id1", "name": "puf" } }, child2: { "user": { "id": "id2", "name": "abe" } }, child3: { "user": { "id": "id1" "name": "puf" } } } 

Обновленный дизайн:

Поэтому, помимо хранения идентификатора и имени пользователя, мы также должны сохранить узел с самим идентификатором в качестве ключа и пометить его как true

 { child1: { "user": { "id": "id1", "name": "puf" "id1": true } }, child2: { "user": { "id": "id2", "name": "abe" "id2": true } }, child3: { "user": { "id": "id1" "name": "puf" "id1": true } } } 

С обновленным дизайном, если я выполняю ref.orderByChild('user/id1').equalTo(true)

Я получаю выходные данные как Child1 и Child 3

и если я выполняю ref.orderByChild('user/id1').equalTo(null) ,

Я бы получил Child2 в качестве вывода

  • ACTION_SENDTO для отправки электронной почты
  • Как заставить очистить кеш с помощью Universal Image Loader Android?
  • BroadcastReceiver не получает BOOT_COMPLETED
  • Какая версия JDK (уровень языка) требуется для Android Studio?
  • Вставить новое намерение контакта
  • Как открыть новое действие, щелкнув элемент в списке?
  • Папка SRC в Eclipse пуста (class MainActivity не создан) после создания нового проекта андроида с использованием Eclipse
  • разница между и на Android
  • Связь между деятельностью и службой
  • Dynamic ListPreference в android
  • Android: Пользовательская панель заголовка
  • Давайте будем гением компьютера.