При извлечении данных из базы данных Firebase в реальном времени (т. Е. С определенного узла) вы будете загружать все данные в этом месте, включая дочернюю коллекцию, если она у вас есть. См. Firebase Doc для прослушивания значений
Есть два способа избежать profile_picture
- При возврате ответа на вызовы https вы можете исключить ключ изображения профиля.
- В противном случае поместите изображение профиля в другое дерево, если оно вам не нужно, пока вы загружаете дерево партнеров.
Позвольте мне объяснить подробно ниже
Шаг 1: удаление изображения профиля с объекта
var partner = admin.database().ref().child('partner');
partner.on("value", function (snapshot) {
res.status(200).json({ partner: snapshot.val() });
// don't simply return like this. Instead follow like below
var partners = [] ; // create a partners array
snapshot.forEach(function(childSnap){
var p = childSnap.val();
p.id = childSnap.key // this will the id of the each child inside the partner tree
delete p.profilePicture;
partners.push(p); //
});
res.status(200).json({ partner: partners });
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
Если вы делаете, как показано ниже, вы можете исключить ключ изображения профиля из ответа https. Но имейте в виду, что в любом случае вы загрузите все данные из дерева.
Шаг 2: Поместить изображение профиля в другое дерево
Для этого вам нужно изменить метод, который добавляет данные в дерево партнеров. Позвольте мне объяснить это.
Например: при добавлении данных о партнерах поместите profile_picture в другое дерево типа partnerDetails.
var partnerKey = firebase.database().ref('partner').push().key;
var partnerUpdate = {};
partnerUpdate['partner/' + partnerKey] = partner; // parnter Object without profilepicture
partnerUpdate['partnerDetails/' + partnerKey + 'profilePicture'] = profilePicture;
// the partnerKey must be same for the both the tree because it's the associated key for both of them.
firebase.database().ref().update(partnerUpdate) // this is called multipath update
Таким образом, после этого у вас не будет изображения профиля в дереве партнеров. Я надеюсь, что вы перечислите дерево партнеров в клиенте и выберите одного из партнеров из списка, который отобразит все детали. Если вы это сделаете, вы можете передать ключ партнера (т.е. ассоциированный ключ) и получить для этого изображение профиля партнера,
firebase.database().ref('/partnerDetails/' + partnerId).on('value').then(function(partDetailSnap){
// here you will get the profile_picture of the partner.
});
Облачные функции будут очень быстрыми. Если это не нужно холодный старт. Вы можете сделать то же самое для некоторых других полей, как я сделал это для изображения профиля, используя шаг 2 или 1.
Надеюсь, это даст некоторую идею. Не стесняйтесь спрашивать больше.