从 firebase 实时数据库(即从特定节点)获取数据时,您将在该位置下载整个数据,包括子集合(如果有)。请参阅 firebase 文档了解监听值 https://firebase.google.com/docs/database/web/read-and-write#listen_for_value_events
有两种方法可以避免 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 对个人资料图片所做的那样。
希望这能给一些想法。请随时询问更多信息。