我有一个带有“标签”树和“用户”树的firebase数据库。每个用户都有一些标签(在这种情况下命名为首选项)相关联。数据库结构就是这样的:
对于确定的用户,我想在列表中显示用户没有的所有首选项。
Example:
Tags: 1, 2, 3, 4
User has 1,3
I want to show in a list, 2 and 4!
我有一个代码可以正确显示用户拥有的所有首选项/标签,但我不知道如何显示用户没有的内容列表!
这是我的代码,显示了常见的偏好(完美无缺)
showUserPreferences(){
let userTag = [];
var ref = firebase.database().ref('/users/'+ this.email+'/preferenze/')
var ref1 = firebase.database().ref('/tag/');
ref.once('value', function(preferenze){
preferenze.forEach(function(singolaPref){
ref1.once('value', function(tags){
tags.forEach(function (singoloTag){
if(singolaPref.key == singoloTag.key){
userTag.push(singolaPref.child("nome").val())
}
return false;
})
})
return false;
})
}).then(a=>{
this.tags = userTag;
})
}
我希望我已正确解释了我的问题。如果您需要更多代码或其他详细信息,请询问。提前致谢。
我想我不妨用粗略的代码示例提交答案。
这个想法是你加载两个快照(preferenze
和tag
集合)。你可以,例如将preferenze
保存在地图中以便于查找。然后在迭代标记时使用此映射。
showMissingPreferences() {
var preferencesRef = firebase.database().ref('/users/'+ this.email+'/preferenze/')
var tagsRef = firebase.database().ref('/tag/');
preferencesRef.once('value')
.then(userPrefSnap => {
// Save the user's tags in a map for lookup.
let userPrefMap: { [key: string]: boolean } = {}
userPrefSnap.forEach(userTagSnap => {
userPrefMap[userTagSnap.key] = true
})
return tagsRef.once('value')
.then((tagsSnap) => {
let missingTags = []
tagsSnap.forEach(tagSnap => {
// Only push the tag if it's not in the map.
if(!userPrefMap[tagSnap.key]) {
missingTags.push(tagSnap.child("nome").val())
}
})
return missingTags
})
})
.then(missingTags => {
this.tags = missingTags
})
}
我没有运行或测试代码,因此可能存在错误。但我希望你明白这个主意!