选择 MongoDB 作为数据库的 Node 开发者,避免不了 MongoDB 数据库设计,而 Mongoose 是 Mongodb 和 Node.js 之上基于 Schema 的数据建模和解决方案,提供类型转换,字段校验,查询构造等功能。最近自己想做一个基于 MongoDB 的博客系统,网上搜了一些资料,总结了以下 Schema 设计。

博客系统实现需要三张表:

  • 文章表

  • 分类表

  • 用户表

文章表

文章表包含了以下这些字段。

字段名 字段含义
title 文章的标题
content 文章的内容
category 文章的分类
author 文章的作者
slug 文章的url(如果是中文的话,给其起一个英文的名称,说是有利于搜索引擎的优化,有点不大明白)
published 文章是否发布
meta 搜集这个文章被赞了多少次,被踩了多少次。
comments 文章的评论
created 文章的创建时间

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var PostSchma = new Schema({
title : { type: String, required: true },
content : { type: String, required: true },
category : { type: Schema.Types.ObjectId, ref: 'Category' },//作为外键
author : { type: Schema.Types.ObjectId, ref: 'User' }, //作为外键
slug : { type: String, required: true },
published: { type: Boolean, default: false },
meta : { type: Schema.Types.Mixed },
comments : [ Schema.Types.Mixed ],
created : { type: Date }
});
mongoose.model('Post', PostSchema);

用户表

用户表主要由以下字段构成。

字段名 字段含义
name 用户名
email 邮箱地址
password 密码
created 创建时间

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var md5 = require('md5');
var UserSchema = new Schema({
name : { type: String, required: true },
email : { type: String, required: true },
password: { type: String, required: true },
created : { type: Date }
});
mongoose.model('User', UserSchema);

分类表

分类表主要有以下字段构成。

字段名 字段含义
name 分类名称
slug 固定链接
created 创建时间

实现:

1
2
3
4
5
6
7
8
9
10
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var CategorySchema = new Schema({
name : { type: String, required: true },
slug : { type: String, required: true },
created: { type: Date }
});
mongoose.model('Category', CategorySchema);