【问题标题】:Firebase - Querying in flattened data with Two Way RelationshipFirebase - 使用双向关系查询扁平数据
【发布时间】:2017-02-11 16:32:10
【问题描述】:

我目前有一个具有以下结构的 Firebase 数据库

// Tracking two-way relationships between users and groups     {  
 " users": {  
   "mchen": {  
     "name": "Mary Chen",  
     "groups": {       
        "alpha": true,  
        "charlie": true  
     }  
   },  
   ...  
 },      "groups": {  
   "alpha": {  
     "name": "Alpha Group",  
     "members": {  
       "mchen": true,  
       "donald": true  
     }  
 },   "bravo": {  
   "name": "Bravo Group",  
     "members": {  
       "mickey": true,  
       "donald": true  
     }  
   },  
   ...  
 }
}

如何编写查询以向我显示一组给定用户共有的所有组。即显示米奇和唐纳德都注册的所有组。

【问题讨论】:

  • 你有没有尝试过?

标签: firebase firebase-realtime-database


【解决方案1】:

我认为单个查询是不可能的,并且不支持多个 equalTo。

我会这样重组你的数据库

root
L users
L groups
  L groupName
    L ...
L groupMembers
  L groupName
    L userName:true

然后查询喜欢

查询是reference.child('groupMembers').orderByChild('Donald').equalTo(true);

然后查看结果

List resultList
for all DataSnapshot's as snapshot in dataSnapshot's Children
  if snapshot.child('Mickey') is not null
    add to resultList key of snapshot


// resultList now contains all group keys/names which Donald and Mickey are both appart of.

这将是解决您的问题的一种方法,但您最初会下载 Mickey 可能不属于的组。这可能是也可能不是您想要的(安全等)。

如果您只想在没有任何客户端过滤的情况下获取它们都属于的组,则必须将数据库重组为类似的结构。

root
L users ...
L groups ...
L groupPairs
  L groupName
    L DonaldMickey:true

您的查询看起来很相似,从组中添加/删除用户会更加复杂。您必须确保每个可能的对都在 groupName 下。您可以通过设置标准来减少配对的数量,例如:Donald 在 Mickey 之前,因为 D 在 M 之前,或类似的东西。

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多