如何检索不常见的数据

问题描述 投票:0回答:1

我有一个带有“标签”树和“用户”树的firebase数据库。每个用户都有一些标签(在这种情况下命名为首选项)相关联。数据库结构就是这样的:

enter image description here

对于确定的用户,我想在列表中显示用户没有的所有首选项。

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;
     }) 
  }

我希望我已正确解释了我的问题。如果您需要更多代码或其他详细信息,请询问。提前致谢。

typescript firebase firebase-realtime-database
1个回答
1
投票

我想我不妨用粗略的代码示例提交答案。

这个想法是你加载两个快照(preferenzetag集合)。你可以,例如将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
        })
}

我没有运行或测试代码,因此可能存在错误。但我希望你明白这个主意!

© www.soinside.com 2019 - 2024. All rights reserved.