Moe*_*tib 3 javascript mongodb nosql
我刚刚学习如何使用 MEANJS 构建网站,并且正在构建我的数据,但不确定最佳实践,我对 NoSql 概念非常陌生。
我需要存储:
questions
answers
likes
saved_questions
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我允许用户保存问题以便稍后查看,并且他们可以访问他们发布的任何答案。我为每个问题提供一些统计数据(即喜欢的数量、答案的数量等)
我是否应该为“问题”及其内部所有内容创建一个文档:
{_id: <ObjectId>,
user_id: <ObjectId>,
question: 'how can we....',
answers: [{user_id: <ObjectId>, answer: ''}],
likes: [{user_id: <ObjectId>}],
saves: [{user_id: <ObjectId>}]
}
Run Code Online (Sandbox Code Playgroud)
或者我应该为每个文件制作多个文件?或者我应该同时使用这两种方法?
小智 6
我至少有两个数据库模型,可能一个用于用户,另一个用于问题。MEAN.JS 样板的一大优点是它已经附带了一个具有注册、登录/注销功能的用户模块。因此,一旦部署新项目,您就可以解决这个问题。
既然已经解决了这个问题,我将使用 Yo Generator 创建一个名为 Question 的新 CRUD 模块。您可以手动添加文件,但 Yo 通过自动将文件放置在正确的位置来帮助您快速准确地完成此操作,并提供示例代码来帮助您进行设置。要了解如何使用 Yo 生成器,我将查看MEAN.JS 文档的Yo 生成器部分。
从应用程序的根目录运行yo meanjs:crud-module Question. 这将创建数据库模型所需的所有必要文件,以及前端和后端的新模块,其中包含如何创建/读取/更新/删除问题的示例。现在,如果您登录,您将在菜单栏中看到新模块。
然后打开app/controllers/models/question.server.model.js。您可以在该文件中定义新的数据库模型。根据您希望数据的复杂/关系程度,您希望 Mongoose 模型看起来像这样:
var QuestionSchema = new Schema({
created: {
type: Date,
default: Date.now
},
title: {
type: String,
default: '',
trim: true,
required: 'Title cannot be blank'
},
question: {
type: String,
default: '',
trim: true
},
user: {
type: Schema.ObjectId,
ref: 'User'
},
answers: {
type: Array,
default: []
},
likes: {
type: Array,
default: []
},
saves: {
type: Array,
default: []
}
});
Run Code Online (Sandbox Code Playgroud)
显然,这是非常简化的。您可能希望为喜欢、保存和报告创建单独的猫鼬模型,以便您可以存储有关每个模型的更多数据(即:user_id、日期、报告/保存/喜欢的原因等)。满足您需求的完美 mongoose 模型,我肯定会在 mongoosejs.com 上查看有关Mongoose Schemas的文档。
我希望这有帮助!
为了获取给定用户操作的列表,我将继续为每种类型的操作(评论、点赞、保存)创建一个新的 Mongoose 架构,并在其中存储用户操作的详细信息。例如,在答案模式中,您可以存储实际的评论、谁说的、何时说的、针对什么问题等。然后只需查询给定用户 ID 的操作表即可检索操作列表。
所以..
var QuestionSchema = new Schema({
created: {
type: Date,
default: Date.now
},
title: {
type: String,
default: '',
trim: true,
required: 'Title cannot be blank'
},
question: {
type: String,
default: '',
trim: true
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
var AnswerSchema = new Schema({
created: {
type: Date,
default: Date.now
},
question: {
type: Schema.ObjectId,
ref: 'Question'
},
user: {
type: Schema.ObjectId,
ref: 'User'
},
answer: {
type: String,
default: '',
trim: true
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4081 次 |
| 最近记录: |