了解使用用户标识符的Firebase数据绑定

时间:2018-03-14 21:43:46

标签: ios firebase firebase-realtime-database firebase-authentication

伙计们我正在尝试学习Firebase框架,我确实对存储数据有疑问,据我所知,数据存储为Firebase数据库中的整个JSON文件。

假设我的数据模型很少(只是为了简化我的描述):

用户和文章

使用Firebase SDK,我们可以使用非常简单的查询来简单地创建用户。 Firebase用户有uid我可以将其用于我的目的。我现在的一般问题是如何将uid与我的数据绑定。

如果我错了,请纠正我,但我打算使用从Firebase检索到的uid在Realtime DataBase中创建几个节点,如下所示:

{
  "users": {
    "$uid": {
    "name": "Alex",
    "lastname": "Matrosov"
  },
  "$uid": {
    "name": "John",
    "lastname": "Malkovich"
  }
  }
}

因此,当我创建/登录用户时,我计划将相关信息添加到用户/用户节点。

然后我想存储用户文章

{
      "articles": {
        "$article_id": {
        "name": "Some name",
        "$uid": "32431kjkjfj232"
      },
      "$article_id": {
        "name": "Some name",
        "$uid": "5555fffflllll"
      }
      }
    }

据我所知,当我要求文章时,它会包含所有文章吗?如果我正确理解这个uid和数据绑定,请告诉我。

1 个答案:

答案 0 :(得分:1)

好吧,我会说你几乎是对的。只是几点说明:

  1. 在文章的JSON结构中,由于'$ uid'字段上的'$'美元标记通常是指firebase数据库中的变量,我建议你将其更改为'userUID'之类的其他内容或任何你想要的。将结构留下这样的东西:

    {
      "articles": {
        "$article_id": {
          "name": "Some name",
          "userUID": "32431kjkjfj232"
        },
        "$article_id": {
          "name": "Some name",
          "userUID": "5555fffflllll"
        }
      }
    }
    
  2. 然后,您只需按以下方式查询:

  3. 使用Swift 4和Firebase 4:

    let articlesRef = Database.database().reference(withPath: "articles")
    
    articlesRef.observe(.value) { snapshot in
        // Snopshot will contain all articles on your db reference.
        print(snapshot)
    }
    
    let userUID = "..."
    let articlesByUser = articlesRef.queryOrdered(byChild: "userUID").queryEqual(toValue: userUID)
    
    articlesByUser.observe(.value) { snapshot in
        // In this case, snapshot will contain all articles that has the 'userUID' key equal to what you've passed (what in this case, is the value of userUID constant.)
        print(snapshot)
    }