2015-04-05 5 views
2

Я не понимаю, почему мой запрос к моей базе данных Firebase не работает. Я новичок в этом и решил следовать «простому учебнику» для чтения данных. Написание JSON-объекта работало, было очень приятно видеть это. Чтение с другой стороны начинает меня раздражать. Единственное, что я хотел сделать, это прочитать «запись», в которой адрес электронной почты был равен некоторому адресу электронной почты. Они уникальны и уникальны в пользовательской базе данных. Как только я получил пользователя, я мог использовать его UID, автоматически генерируемое значение в push() ;, чтобы делать другие вещи. Следовательно, это демонстрация, и я не забочусь о безопасности в данный момент, применим поведение по умолчанию для чтения и записи недавно созданной базы данных Firebase. Полный доступ для чтения и записи из любого места.Firebase: query возвращает null

это код демо-сайта, чтобы увидеть, если материал работает

<body> 
    <h1>retrieve data</h1> 
    <div id="aaa" style="margin:20px;padding:20px;border-radius:30px;background-color:#6666FF;float:left">USERADD</div> 
    <div style="clear:both"></div> 
    <pre id="rawdata"></pre> 
</body> 

Это был демонстрационный код, который работал

var demofbdb = new Firebase("https://examples-sql-queries.firebaseio.com/user"); 

demofbdb 
.startAt('[email protected]') 
.endAt('[email protected]') 
.once('value', function show(record) { 
    $('#rawdata').text(JSON.stringify(record.val(), null, 4)); 
}); 

Это мой код, но возвращает нуль, и я не знаю, почему

var demofbdb = new Firebase("https://<my-firebase-database>.firebaseio.com/Users"); 

demofbdb 
.startAt('[email protected]') 
.endAt('[email protected]') 
.once('value', function show(record) { 
    $('#rawdata').text(JSON.stringify(record.val(), null, 4)); 
}); 

Это структура/Users

"-JlyxV5xvQFLybevk9kD" : { 
    "AccountExpireDate" : "31/03/2016", 
    "AccountStartDate" : "01/04/2015", 
    "Alias" : "het hol van pluto", 
    "Attended" : { 
     "-JlyxMApRwcniJLXfqbU" : true 
    }, 
    "Birthday" : "01/01/1970", 
    "E-Mail" : "[email protected]", 
    "FirstName" : "Demo", 
    "LastName" : "De Demoon", 
    "MemberOf" : [ "-JlyxMqpRw5nrJLef9bU" ], 
    "OrganizationID" : "", 
    "Password" : "abc123!" 
}, 
"-JlyxSJ8MciBNxguT415" : { 
    "AccountExpireDate" : "31/03/2016", 
    "AccountStartDate" : "01/04/2015", 
    "Alias" : "jos-het-debiele-ei", 
    "Attended" : { 
     "-JlyxMApRwcniJLXfqbU" : true 
    }, 
    "Birthday" : "01/01/1970", 
    "E-Mail" : "[email protected]", 
    "FirstName" : "Jos", 
    "LastName" : "Jossers", 
    "MemberOf" : [ "-JlyxMqpRw5nrJLef9bU" ], 
    "OrganizationID" : "", 
    "Password" : "abc123!" 
} 

Для уточнения этой структуры «UID» находятся непосредственно под пользователями. Когда UID разворачиваются, мы видим детали.

Ожидаемый результат моего запроса - это один объект JSON пользователя, имя которого является «Демо», а его фамилия - «De Demoon».

Заранее спасибо

PS: Я больше знаком с базами данных SQL, чем NoSQL. Я вынужден использовать этот последний, кроме того, что я вижу базы данных noSQL более полезными и мощными, когда у нас есть «предварительно вычислимые данные», данные, которые могут храниться в реляционной базе данных, но всегда должны проходить через те же объединения одним путем. После того, как эти результаты были рассчитаны (объединены) один раз и результаты, записанные в базу данных noSQL, ускоряют поиск быстрее, уменьшая ненужную нагрузку и группируя вместе часто запрашиваемые наборы данных. Пожалуйста, также исправьте мое видение, если я ошибаюсь.

ответ

5

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

var demofbdb = new Firebase("https://<my-firebase-database>.firebaseio.com/Users"); 

demofbdb 
.orderByChild('E-Mail') 
.startAt('[email protected]') 
.endAt('[email protected]') 
.once('value', function show(record) { 
    $('#rawdata').text(JSON.stringify(record.val(), null, 4)); 
}); 

Чтобы установить данные, как демо, вы могли бы сделать что-то вроде этого:

function createDemoData(){ 
    var users = { 
     "123": { 
      "email": "[email protected]", 
      "name": "Kato" 
     }, 
     "234": { 
      "email": "[email protected]", 
      "name": "Anant" 
     }, 
     "345": { 
      "email": "[email protected]", 
      "name": "Michael" 
     }, 
     "456": { 
      "email": "[email protected]", 
      "name": "Kavya" 
     } 
    }; 

    var fbdbref = new Firebase("https://<my-firebase-database>.firebaseio.com/user"); 
    fbdbref.set(users); 

    fbdbref.child("123").setPriority("[email protected]"); 
    fbdbref.child("234").setPriority("[email protected]"); 
    fbdbref.child("345").setPriority("[email protected]"); 
    fbdbref.child("456").setPriority("[email protected]"); 
} 

Теперь вы можете запросить по email без использования orderByChild , как и в демо.

+0

Мой Спаситель! orderByChild исправил это. Не заметил, что это было необходимо, если не был использован setPriority. Думал, что могу просто подтолкнуть данные к firebase и запросить его, похоже, что я ошибся. Вещи, которые происходят во время обучения, я думаю. – jonny8bit

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