如何为具有多位歌手的歌曲设置架构?

时间:2019-05-01 05:37:57

标签: node.js mongodb express mongoose ejs

我正在创建一个显示新音乐的应用程序。在登录页面上,将有一个部分显示最近上传的音乐。当用户单击歌曲时,它将带他们到显示模板,该模板将显示艺术家名称,标题,视频,描述和艺术家社交媒体。

我还希望有一个部分显示该歌曲中包含的所有歌手。当用户单击歌手姓名时,它将呈现一个包含该歌手所有歌曲的页面。所以我在创建模式时遇到问题,因为一首歌可以有多个艺术家。

我的旧架构旨在从表单中获取输入并显示它,而与艺术家没有任何关系。

使用新的架构,我试图在艺术家和歌曲之间建立关系。

旧模式

const mongoose = require("mongoose");
artistSchema = new mongoose.Schema({
  name: String,
  title: String,
  image: String,
  content: String,
  description: String,
  category: String,
  soundcloud: String,
  scName: String,
  instagram: String,
  igName: String,
  twitter: String,
  twName: String
});
module.exports = mongoose.model("Artist", artistSchema);

新模式

const mongoose = require("mongoose");

artistSchema = new mongoose.Schema({
  name: String,
  social: schema.ObjectId,
  music: schema.ObjectId
});
module.exports = mongoose.model("Artist", artistSchema);
const mongoose = require("mongoose");

socialSchema = new mongoose.Schema({
  soundcloud: String,
  scName: String,
  instagram: String,
  igName: String,
  twitter: String,
  twName: String
});
module.exports = mongoose.model("Social", socialSchema);
const mongoose = require("mongoose");

musicSchema = new mongoose.Schema({
  title: String,
  image: String,
  content: String,
  description: String,
  category: String
});
module.exports = mongoose.model("Music", musicSchema);

环顾了一会后,我发现了一些与我想做的事情有关的文档。 https://gist.github.com/fwielstra/1025038

所以我的问题是,如果我的架构设置正确,并且如果继续遵循Github文档,是否会遇到任何问题。

1 个答案:

答案 0 :(得分:0)

探讨一对多关系。一首歌涉及很多艺术家。

const mongoose = require("mongoose");

musicSchema = new mongoose.Schema({
  title: String,
  image: String,
  content: String,
  description: String,
  category: String,
  artists: [
    {
      type: Schema.Types.ObjectId,
      ref: "Users"
    }
  ]
});
module.exports = mongoose.model("Music", musicSchema);


voters: [
    {
      type: Schema.Types.ObjectId,
      ref: "someModel[artists model]"
    }
]