【问题标题】:Query data from firebase Array从 firebase Array 查询数据
【发布时间】:2016-04-28 10:56:55
【问题描述】:

我的 firebase 用户树有这样的结构:

用户:

{
 {
 'userName': 'abc',
 'userEmail' : 'abc@abc.com',
 'userPreferences': 
   [ 
     0:'Cinema', 
     1:'It' 
   ] 
  },
  {
 'userName': 'abc',
 'userEmail' : 'abc@abc.com',
 '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); 

但我没有得到最好的结果。我得到这个记录:

【问题讨论】:

  • "I don't get the best solution"是什么意思?

标签: angularjs firebase angularfire firebase-realtime-database


【解决方案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') 但是您将它与数组进行比较,如果我错了请纠正我,但我不认为 @ 的行为987654323@是循环遍历每个值并比较它们,我认为这只是一个直接比较

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

【讨论】:

  • 感谢您的回答。我编辑了我的帖子。是的,那是我的问题,我找不到如何将 .equalTo('Cinema') 与数组进行比较。而且我必须保持相同的数据结构
  • @SihemHcine 你想让我从 firebase 读取数据吗?
  • 当然是的,先生。请给我你的邮件好吗
【解决方案2】:

在 NoSQL 中,您通常会得到一个反映应用程序使用数据方式的数据模型。如果你想了解所有喜欢电影的用户,你应该在你的树中建模:

users: {
   'uid-of-abc': {
     'userName': 'abc',
     'userEmail' : 'abc@abc.com',
     'userPreferences': [ 
        0:'Cinema', 
        1:'It' 
     ] 
   },
   'uid-of-def': {
     'userName': 'def',
     'userEmail' : 'abc@abc.com',
     '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 FirebaseFirebase documentation on structuring data 和 Stack Overflow 上的数十个答案中都有介绍。一些:

【讨论】:

  • 谢谢先生的回答 :)。但在我的应用程序结构(代码)中,我不必定义对 Cinema 的偏好。
猜你喜欢
  • 2017-09-20
  • 2018-04-16
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2017-05-29
  • 1970-01-01
  • 2016-10-09
相关资源
最近更新 更多