Firebase .index на предупреждение

Это моя структура данных со строкой запроса.

Структура данных

{
 "root_firebase_DB": {
  "users": [{
   "meUID": {
    "name": "ME",
    "rooms": [{
     "room_id_01": true
    }]
   }
  }, {
   "friendUID": {
    "name": "FRIEND",
    "rooms": [{
     "room_id_01": true
    }]
   }
  }],
  "rooms": [{
   "room_id_01": {
    "meUID": true,
    "friendUID": true
   }
  }],
  "messages": [{
   "room_id_01": {
    "message_id_01": {
     "text": "Hello world",
     "user": {
      "_id": "meUID",
      "name": "ME"
     }
    },
    "message_id_02": {
     "text": "Xin Chao",
     "user": {
      "_id": "friendUID",
      "name": "FRIEND"
     }
    }
   }
  }]
 }
}

я имею meUID а также friendUID Я хочу найти комнату, которая содержит нас обоих.

Запрос ниже в порядке, но я получил .indexOn предупреждение

const meUID = 'abc';
const friendUID = 'abc';
/**
* Find room key
* filter by meUID and friendUID
*
* THIS WAY I GOT WARNING .indexON
*
*/
firebase.database().ref()
    .child('rooms')
    .orderByChild(meUID)
    .equalTo(true)
    .on('child_added', snap => {
      if (snap.hasChild(friendUID)) {
        console.log('Got roomKEY', snap.key);
      }
    });

В общем, я получаю множество комнат от meUID и петля, каждая петля, которую я иду, чтобы фильтровать как ниже, чтобы найти, есть ли в этой комнате мой friendUID или нет, таким образом, у меня нет предупреждения с индексом, но, похоже, теряю время, чтобы зациклить и проверить все комнаты.

/**
* THIS WAY NOT GET ANY WARNING
* BUT IS THERE OTHER GOOD WAY TO GO?
*/
const ref = firebase.database().ref();
const meUID = 'aaa';
const friendUID = 'bbb';
const messages = [];

ref.child(`users/${meUID}/rooms`).once('value', snap => {
  const roomKey = null;
  // loop all room that belong to me
  snap.forEach(room => {
    // with each room, i must going to check is this room belong to friendUID or not
    ref.child(`users/${friendUID}/rooms/${room.key}`).once('value', friendRoomSnap => {
      if (friendRoomSnap.val()) {
        // found room that belong to friendUID too
        roomKey = room.key;
      }
    });
    if (roomKey != null) {
      //if found that room, break the loop
      return true;
    }
  });
  // goto fetching all messages in this room
  ref.child(`messages/${roomKey}`).on('child_added', messageSnap => {
    messages.push(messageSnap.val());
  });
});

//Too much stuff, is there any way better?

Пожалуйста, помогите, я новичок.

Моя структура данных получает проблемы?

0 ответов

Другие вопросы по тегам