2016-04-28 65 views
0

我的火力用户树具有这样的结构:查询数据

用户:

{ 
{ 
'userName': 'abc', 
'userEmail' : '[email protected]', 
'userPreferences': 
    [ 
    0:'Cinema', 
    1:'It' 
    ] 
    }, 
    { 
'userName': 'abc', 
'userEmail' : '[email protected]', 
'userPreferences': 
    [ 
    0:'Cinema', 
    1:'Music' 
    ] 
} 
} 

于是,我试图找到所有用户他们的首选项列表包含“电影”。
我试试这个代码:

var ref1 = new Firebase("https://event-application.firebaseio.com/users"); 
$scope.user = $firebaseArray(ref1.orderByChild("userpreferences").equalTo('Cinema')); 
console.log($scope.user); 

但我没有得到最好的结果。我得到这样的记录: enter image description here

+1

什么* “我没有得到最好的解决方案” *手段? – Bigood

回答

1

你的JSON结构显示偏好为userPreferences,所以不会有以下工作?

var ref1 = new Firebase("https://event-application.firebaseio.com/users"); 
$scope.user = $firebaseArray(ref1.orderByChild("userPreferences").equalTo('Cinema')); 
console.log($scope.user); 

不过,我觉得也有你的代码另外一个问题,你是被称为.equalTo('Cinema')但是你比较它与一个数组,纠正我,如果我错了,但我不认为行为.equalTo('Cinema')是循环遍历每个值并进行比较,我认为这只是一个直接比较

如果是这种情况,您可能需要通过从Firebase读取数据并通过操作来构建自定义查询函数可用于快照

+0

谢谢你的回答。我编辑了我的帖子。是的,这是我的问题,我没有找到如何比较.equalTo('Cinema')和数组。我必须保持相同的数据结构 –

+0

@SihemHcine你想让我从firebase读取数据? – Grant

+0

当然是主席先生,您能否给我您的邮件 –

1

在NoSQL中,您经常会得到一个反映该数据模型的数据模型您的应用程序使用数据的方式。如果你想阅读所有对电影的偏好的用户,你应该模式,在你的树:

users: { 
    'uid-of-abc': { 
    'userName': 'abc', 
    'userEmail' : '[email protected]', 
    'userPreferences': [ 
     0:'Cinema', 
     1:'It' 
    ] 
    }, 
    'uid-of-def': { 
    'userName': 'def', 
    'userEmail' : '[email protected]', 
    'userPreferences': [ 
     0:'Cinema', 
     1:'Music' 
    ] 
    } 
}, 
"preferences-lookup": { 
    "Cinema": { 
    "uid-of-abc": true, 
    "uid-of-def": true 
    }, 
    "It": { 
    "uid-of-abc": true 
    }, 
    "Music": { 
    "uid-of-def": true 
    } 
} 

现在,你可以找出哪些用户喜欢电影院:

ref.child('preferences-lookup/Cinema').on('value', function(snapshot) { 
    snapshot.forEach(function(userKey) { 
    console.log(userKey.key()+' prefers Cinema'); 
    }); 
}); 

这是覆盖在这blog post on denormalizing data with Firebase,在Firebase documentation on structuring data和在这里堆栈溢出的几十个答案。有几个:

+0

谢谢您的支持:)但是在我的应用程序结构(代码)中,我没有定义Cinema的偏好。 –