我一直在搜索这里/谷歌的问题,但没有找到一个明确的答案。我觉得这应该是直截了当的。
我正在使用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]
})
答案 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
}],
...
});