我应该使用哪种模式类型作为Mongoose中的对象数组的属性?

时间:2015-09-22 00:58:42

标签: node.js mongodb mongoose

我一直在搜索这里/谷歌的问题,但没有找到一个明确的答案。我觉得这应该是直截了当的。

我正在使用MEAN堆栈创建我的个人投资组合网站,完成所有前端,并希望从后端加载我所有网站的内容信息,而不是从我的Angular Controller中加载。要加载的内容的一个示例是我的html中的不同组合部分。现在,那些组合部分在我的Angular控制器中,正在那里定义,并且是一个对象数组,其中“name”,“language”,“reference”和“image reference”作为我每个项目的属性。 / p>

我想要做的是在我的后端制作一个内容模型,其中包含我所有网站的内容,每个内容都是“内容”模型的属性,为其创建路由,并链接它通过Angular服务。

我并不担心在这里使用Node / Mongoose的实用性,因为我正在这样做,所以我可以展示我对如何使用服务/节点后端以及连接两者的知识。

以下是我的控制器中投资组合数组的样子(我希望将其存储在后端) -

vm.projects = [
{
  name: 'Tic-Tac-Toe',
  language: 'ANGULAR.JS',
  reference: 'angular',
  image: '/assets/images/tic-tac-toe.png'
},
{
  name: 'Escrow',
  language: 'RUBY ON RAILS',
  reference: 'ruby',
  image: '/assets/images/escrow.png'
},
{
  name: 'Feed.Me',
  language: 'RUBY ON RAILS',
  reference: 'ruby',
  image: '/assets/images/feed-me.png'
},
{
  name: 'Gone-In',
  language: 'NODE.JS',
  reference: 'node',
  image: '/assets/images/gone-in.png'
}
];

这是我的Mongoose模型目前的样子。我在定义架构时遇到了麻烦。这些属性是我想要加载到我的网站的所有不同内容。与上面数组对应的属性是'projects'。此属性与大多数其他属性一样,需要是一个对象数组。我没有在Mongoose的官方文档中看到关于对象数组的明确属性类型。我不觉得[Schema.Types.Mixed]真的是正确的答案。是什么?

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var contentSchema = new Schema({
  aboutParagraphs: [String],
  socialMediaProfiles: [Schema.Types.Mixed],
  skills: [Schema.Types.Mixed],
  languages: [Schema.Types.Mixed],
  projects: [Schema.Types.Mixed],
  schools: [Schema.Types.Mixed],
  companies: [Schema.Types.Mixed]
})

1 个答案:

答案 0 :(得分:2)

您可以使用自己的架构定义嵌入式sub-documents的结构。

所以在这种情况下你可以创建:

var projectSchema = new Schema({
    name: String,
    language: String,
    reference: String,
    image: String
});

然后在定义type数组时将模式用作projects

var contentSchema = new Schema({
    aboutParagraphs: [String],
    ...
    projects: [projectSchema],
    ...
});

请注意,您也可以在父架构中隐式声明子文档架构:

var contentSchema = new Schema({
    aboutParagraphs: [String],
    ...
    projects: [{
        name: String,
        language: String,
        reference: String,
        image: String
    }],
    ...
});