创建 Mongoose/MongoDB 常量文档
Posted
技术标签:
【中文标题】创建 Mongoose/MongoDB 常量文档【英文标题】:Creating Mongoose/MongoDB constant documents 【发布时间】:2019-06-09 17:51:36 【问题描述】:我正在尝试对我正在编写的 NodeJS 程序实施一种基于角色的访问控制。这些角色将使用 Mongoose 与所有其他数据一起存储在 MongoDB 数据库中。 RoleSchema
就是为此目的而创建的。角色有一个字符串类型的名称,以及一个包含角色权限的字符串类型的数组。我已经在下面发布了该代码。
对于我的 API,我要实现三个角色,用户、作者和管理员,每个角色都有不同的权限。在集合中只创建一次这些文档的最佳方法是什么?我知道我可以简单地手动创建条目,但我觉得编程解决方案会更好。是否像检查角色是否已经创建,如果没有创建角色那么简单,还是有更好的方法?
const RoleSchema = new Schema(
role:
type: String,
default: "user",
,
permissions:
type: [String]
)
const RoleModel = mongoose.model('roles',RoleSchema)
RoleModel.create(
role: 'user',
permissions: ['readPost', 'commentPost', 'votePost']
, (error, result) => )
【问题讨论】:
【参考方案1】:播种
因此,为数据库播种是一个将一组初始数据提供给数据库的过程。
作为最佳实践,您应该配置种子数据以自动插入文档,而不是手动插入数据。
var seeder = require('mongoose-seed');
// Connect to MongoDB via Mongoose
seeder.connect('mongodb://localhost/yourDatabase', function()
// Load Mongoose models
seeder.loadModels([
'models/roles.js'
]);
// Clear specified collections
seeder.clearModels(['roles'], function()
// Callback to populate DB once collections have been cleared
seeder.populateModels(data, function()
seeder.disconnect();
);
);
);
// Data array containing seed data - documents organized by Model
var data = [
'model': 'role',
'documents': [
'role': 'user',
'value': ['readPost', 'commentPost', 'votePost']
,
'role': 'another role',
'value': ['updatePost', 'deletePost']
]
];
将该代码放在seed.js
文件中并运行它。
mongoose-seed library
【讨论】:
【参考方案2】:假设角色名称是唯一的,你确实可以查询数据库并检查是否已经存在同名角色。如果没有,我们继续创建角色。
这对我很有效:
const createRole = async (role, permissions) =>
const matches = await RoleModel.find(role).exec();
if (matches.length === 0)
return RoleModel.create(role, permissions);
;
然后可以通过以下方式调用该方法(假设您已经连接到数据库):
const userRole =
role: "User",
permissions: ["readPost", "commentPost", "votePost"]
;
(async () =>
await createRole(userRole);
console.log("User role has been created successfully.");
)()
【讨论】:
以上是关于创建 Mongoose/MongoDB 常量文档的主要内容,如果未能解决你的问题,请参考以下文章
通过在 body、mongoose/mongodb 中提供文档来更新多个文档
Nodejs之MEAN栈开发---- 使用MongoDB和Mongoose创建数据模型及API