Firebase / FireStore的新手,并且没有使用NoSQL
的经验。
在学习Android以及为自己构建应用程序的空间时,我意识到我需要一个实时数据库解决方案。但是我坚持建立模型结构。
这是JSON格式:
{
"published": "date",
"title": "This is the title",
"content": "This is the body",
"tags": [
"tag1", "tag2"
]
}
问题在于tags
多对多关系。意识到FireStore可以通过索引解决此问题,但是如何使用“收藏夹”和“文档”构造数据?谁能详细解释?
答案 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
属性不是array
是map
。这是涉及此类对象的最佳实践。请另请参阅有关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"
}
]