2016-05-09 4 views
0

В моем приложении React Native я пытаюсь вытащить все элементы, у которых свойство selected установлено в «true» из базы данных. Однако, когда я регистрирую результаты этого запроса, все они возвращаются как null (хотя ожидаемый ответ должен возвращать два объекта). Мой соответствующий код, а также структура Firebase включены ниже, пожалуйста, дайте мне знать, если вы что-то заметили.equalTo возвращает null от Firebase?

const rootRef = new Firebase(`${ config.FIREBASE_ROOT }`) 

var queryRef = rootRef.orderByChild("items/selected"); 

var solution = queryRef.equalTo("true").once('value', function(snap) { 
    console.log(snap.val()) 
}); 

Firebase JSON:

"items": 
[ 
    { 
    "title":"ball", 
    "selected": "false" 
    }, 

    { 
    "title":"dog", 
    "selected": "true" 
    }, 

    { 
    "title":"phone", 
    "selected": "false" 
    }, 

    { 
    "title":"cup", 
    "selected": "true" 
    } 
], 
+0

Ответ ниже. Но я также заметил, что вы храните элементы в виде массива в дереве JSON, что часто приводит к проблемам. Обязательно прочтите соответствующий раздел в документации Firebase (https://www.firebase.com/docs/rest/guide/understanding-data.html#section-arrays-in-firebase) –

+0

@FrankvanPuffelen thanks-- но я думал в JSON, если у вас есть несколько объектов одного типа, они должны храниться как массив? В этом случае каждый из моих элементов имеет одинаковые атрибуты (тот же тип объекта), поэтому я решил сохранить их в массиве. Как еще мне следует это делать? – user3802348

+0

Прочитайте (документация по Firebase для хранения списков данных) (https://www.firebase.com/docs/web/guide/saving-data.html#section-push). На самом деле, я настоятельно рекомендую вам прочитать, что всего лишь несколько часов, проведенных там, сэкономит гораздо больше времени на линии. –

ответ

0

При запуске Firebase запроса на месте, он принимает каждый дочерний узел в соответствии с этим местом, а затем оценивает состояние, которое вы укажете. Если вы берете каждого ребенка под items, вы увидите, что там нет пути items/selected.

Вы запрос вместо:

var itemsRef = rootRef.child("items"); 
var queryRef = itemsRef.orderByChild("selected"); 
+0

Только что внесли изменения (а также изменил мой JSON для удаления массивов) и это, похоже, возвращает нулевые значения. – user3802348