如何构建Blog API多对多关系的Firestore JSON

时间:2018-08-03 12:07:31

标签: java android firebase google-cloud-firestore

Firebase / FireStore的新手,并且没有使用NoSQL的经验。

在学习Android以及为自己构建应用程序的空间时,我意识到我需要一个实时数据库解决方案。但是我坚持建立模型结构。

这是JSON格式:

{
 "published": "date",
 "title": "This is the title",
 "content": "This is the body",
 "tags": [
  "tag1", "tag2"
 ]
}

问题在于tags多对多关系。意识到FireStore可以通过索引解决此问题,但是如何使用“收藏夹”和“文档”构造数据?谁能详细解释?

2 个答案:

答案 0 :(得分:2)

假设您问题中的代码段是post对象,我建议您使用如下所示的数据库架构:

Firestore-root
    |
    --- posts (collection)
          |
          --- postId (document)
                |
                --- published: "date"
                |
                --- title: "This is the title"
                |
                --- content: "This is the body"
                |
                --- tags
                     |
                     --- tag1: true
                     |
                     --- tag2: true

根据Cloud Firestore数据库中有关modelling data的官方文档进行操作:

  

每个文档包含一组键值对。 Cloud Firestore经过优化,可以存储大量的小文档。

因此,这是我可以想到的最佳数据库结构,并且如您所见,tags属性不是arraymap。这是涉及此类对象的最佳实践。请另请参阅有关working with arrays, lists, and sets的官方文档。

编辑2018年8月13日:

根据有关array membership的更新文档,现在可以使用whereArrayContains()方法基于数​​组值过滤数据。一个简单的例子是:

CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
  

此查询返回每个城市文档,其中region字段是包含west_coast的数组。如果该数组具有要查询的值的多个实例,则该文档仅包含在结果中一次。

答案 1 :(得分:0)

我想您应该使用

帖子:

{
 "published": "date",
 "title": "This is the title",
 "content": "This is the body",
 "tags": [
 "xxx", "yyy"
  ]
}

标签

[
{
    "tag_id":"xxx",
        "tag_name":"abc"
},
{
    "tag_id":"yyy",
        "tag_name":"abc"
}
]