何时在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?
}

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

应用程序的流程将在第一时间呈现所有可能的类别(因此我创建了一个单独的集合,以避免迭代所有歌曲以获取类别)

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

是否可以迭代所有可能的电影以显示与该类别相关的电影? 还是我应该将电影作为类别集合的子集合?

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

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

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

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

然后使用以下命令查询它:

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

相关内容

最新更新