使用Firebase和查询

时间:2016-09-20 14:23:44

标签: javascript angularjs firebase firebase-realtime-database nosql

我正在使用Firebase创建一个NoSQL数据库,但由于我是一个SQL思想家,我的思想需要一些关于Firebase查询和NoSQL数据结构的建议。

我正在使用Ionic 2(AngularJS 2)进行移动应用程序的一些实验,我关心的是速度(用户时间)和表格的正确结构。

在应用程序中,我列出了用户已经制作的内容,用户可以成为群组的一部分,现在遵循Firebase网站的反规范化,我制作了这个模式

Users : {
   Id : {
       Name: string
       Picture: base64 56x56 pixels (image)
       Addresses : {}
       Groups : {
           Worker: boolean 
           Student: boolean
       }
   }
}

Groups : {
  Worker : {
    Desc: string
    Members : {
      Userid: boolean
    }
  }
  Student : {
    Desc: string
    Members : {
      Userid: boolean
    }
  }
}

Made : {
  Id : {
    Name: string
    Thumb: base64 56x56 pixels (image)
    Desc: string
    User: userid
    Images:  base64 dimensions could vary
  }
}

我要做的是显示用户制作的事物列表,只需要点击名称和拇指图像等信息,点击它就会打开其他信息的描述。

现在,如果我使用以下代码片段获取列表,它会返回所有信息,但在开始时我只需要名称和拇指(或其他内容)

return firebase.database().ref('/made/' + madeId)
.once('value').then(function(snapshot) {
  var username = snapshot.val().username;
  // ...
});

那么,在firebase中有什么办法可以做(?):

SELECT name, thumb FROM Table_Made

为了只获取每个查询所需的字段?或

最好还有另一张只包含名称和图片的桌子吗?

同时拥有拇指和图像是一个好主意吗?为了加速json,因为拇指通常小于图像。

查看Firebase文档,似乎小于10mb的图像可以作为base64保存到文档中,以防万一存储更大。你对此有何想法?

1 个答案:

答案 0 :(得分:2)

Firebase客户端始终检索完整的节点。没有办法只获得节点属性的一个子集。

像往常一样:如果您在数据模型上实现用例时遇到问题,请更改数据模型以适合您的用例。因此,在这种情况下,这意味着您可以将名称和缩略图拆分为单独的节点。

MadeListinfo : {
  Id : {
    Name: string
    Thumb: base64 56x56 pixels (image)
  }
}