什么时候在noSQL中复制数据?

时间:2019-05-31 12:52:47

标签: firebase nosql

我正在一个将使用Firebase Firestore的项目中。我没有使用noSQL的经验,所以我致力于了解这项技术。

该应用程序使用户可以选择电影类别并下载相关电影以进行电影编辑。

用户不会更改类别和电影,而是所有者会固定或更改类别和电影。将其视为Netflix目录,用户只能观看电影

有几个类别,但目前只有一个电影属于该类别(以后可能还会有更多电影)。 每部电影都有相关的元数据。

将来: -用户对象将用于对每个用户的得分(与应用程序相关的信息)进行排名。 -有些电影将具有本地化限制,即一部电影仅适用于美国用户。

在我的第一个想法中,数据结构将如下所示:

// Collection
Category: {
    name: "drama" // Could be action, or other
}

// Collection
Movie: {
    name: "Matrix"
    description: "Best movie ever"
    duration: 1321312
    url: "https://www....."
    allowedCountry: "us" // is it the right place for this field?
    category: "drama" // is it ok to duplicate data here?
}

//Collection
user: {
    ranking: 3
    withMovie: "Matrix" // is it ok to duplicate data here?
}

我不确定这是否是解决此问题的正确数据结构。

应用程序流将在所有可能的类别中首次出现(因此,我创建了一个单独的集合,以避免重复遍历所有歌曲来获取类别)

然后,当用户选择类别时,将显示可能的电影,并且应用程序将下载所选择的电影。

可以遍历所有可能的电影以显示与该类别相关的电影吗? 还是应该将电影作为类别收藏的子收藏?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我通常确实将类别直接保留在电影文档中,因为它使查询更容易阅读。

firebase.firestore().collection("movies").where("category", "==", "drama")

事实上,请考虑一下您的电影是否真的只能具有一个类别(如您现在所建模的那样),或者将来它们是否可能具有多个类别(就我所知,Netflix就是这样)。您可以将后者建模为一组类别:

categories: ["drama", "sci-fi"]

然后使用以下命令进行查询:

firebase.firestore().collection("movies").where("categories", "array-contains", "drama")