2016-06-25 2 views
0

Я использую следующую структуру данных в моем приложении:Посмотрите объект с помощью ключа в Firebase

var users = { 
    "tom": { conversations: ["fake-uuid-v4"] }, 
    "bob": { conversations: ["fake-uuid-v4"] } 
}; 

var conversations = { 
    "fake-uuid-v4": { 
    user_one: "tom", 
    user_two: "bob" 
    } 
} 

Каждый пользователь имеет набор ключей отображения к разговору, который содержит данные для разговора, например как последние отправленные сообщения, если пользователь печатает, и т. д. Проблема в том, что мне очень трудно найти разговор.

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

var conversation_id = 'fake-uuid-v4'; 
firebase.database().ref('/conversations') 
    .startAt(conversation_id) 
    .endAt(conversation_id) 
    .on('child_added', function(snapshot, prevKey) { 
     if(snapshot.val()) console.log(snapshot); 
}); 

Однако, это ничего не тянет из базы данных, если изменить код

firebase.database().ref('/conversations/'+conversation_id).on('child_added', function(snapshot, prevKey) { 

}); 

Затем он печатает каждый ключ/значение для разговоров, добавленных в этом случае:

tom 
bob 

Как я могу контролировать все C беседы с ключом, который хранится в массиве цепочек пользователей?

+0

Я не совсем понимаю вопрос. У вас возникли проблемы с чередованием идентификаторов разговоров пользователя и загрузкой каждого разговора? –

ответ

1

Быстрый «ответ» о том, почему ваш первый фрагмент кода не будет работать:

var conversation_id = 'fake-uuid-v4'; 
firebase.database().ref('/conversations') 
    .startAt(conversation_id) 
    .endAt(conversation_id) 
    .on('child_added', function(snapshot, prevKey) { 
     if(snapshot.val()) console.log(snapshot); 
}); 

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

var conversation_id = 'fake-uuid-v4'; 
firebase.database().ref('/conversations') 
    .child(conversation_id) 
    .on('child_added', function(snapshot, prevKey) { 
     if(snapshot.val()) console.log(snapshot); 
}); 
+0

Проблема в том, что 'ref (..). Child (convers_id) .on ('child_added'' возвращает каждую пару ключ/значение в объекте для разговора. Мне нужно прослушивать все разговоры в массиве. способ иметь «child_added», который возвращает весь объект «беседы», например, используя 'child' и' console.log (snapshot.val()) 'выводит' tom', а затем 'bob' вместо' {user_one: 'tom', user_two: 'bob'} ' – Hobbyist

+0

Я не хочу слушать все разговоры, потому что тогда я получу данные о других разговорах пользователей, поэтому должен быть способ получить только беседы с идентификатором 'x' Tl; dr, я хочу child_added для всего разговора, а не только KVP разговора. – Hobbyist

+1

' .on ('value', ... '? –

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