Node.js + Mongoose 中的基本建模
Basic modeling in Node.js + Mongoose
我一直在开发 node.js 应用程序。我正在尝试模拟一个音阶,它有一个名称和一些相关的音符:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var scaleSchema = new Schema({
name: String,
displayName: String,
notes: [{type: String}]
});
module.exports = mongoose.model('Scale', scaleSchema);
但是,我不知道如何 "seed" 甚至访问此模型。我想用一些只加载一次的秤来填充它。我知道我可以要求这个模型并使用 new
来创建新条目,但是我必须将其放入节点应用程序的特定部分吗?是否有特定的最佳实践可供使用?我做错了吗?
我在这里很困惑,但感觉好像我几乎掌握了它的工作原理。有人能指出我正确的方向吗?
您可能想查看 .create() mongoose function。
我不确定这是否是唯一的方法,但您可能想添加类似
的内容
var Scale = mongoose.model("Scale", scaleSchema);
module.exports = Scale; //instead of what you currently have for you last line
然后你可以做类似
的事情
Scale.create({name: varThatHasValName,
displayName: varThatHasValdisplayName,
notes: varThatHasValnotes}, function (err,scale));
当你想制作一个新的秤时,在你的代码的另一部分。
我最近使用 node 和 mongoose class,但我不是专家,但这可能是我会做的(如果我理解你的问题)。
您可以像创建对象一样创建新的数据库条目。这里以播种机class为例。
let mongoose = require('mongoose'),
User = require('../models/User');
module.exports = () => {
User.find({}).exec((err, users) => {
if (err) {
console.log(err);
} else {
if (users.length == 0) {
let adminUser = new User();
adminUser.username = 'admin';
adminUser.password = adminUser.encryptPassword('admin');
adminUser.roles = ['Admin'];
adminUser.save();
console.log('users collection seeded')
}
}
});
};
然后在另一个文件中您可以调用它,它将为您的数据库播种。
let usersCollectionSeeder = require('./usersCollectionSeeder');
usersCollectionSeeder();
希望这对您有所帮助。
至于结构,我喜欢有一个名为 "seeders" 的文件夹。在那里我有一个名为 databaseSeeder.js 的文件,它需要所有其他播种机,如 usersCollectionSeeder.js 然后调用函数。
这是我喜欢使用的示例结构。
我一直在开发 node.js 应用程序。我正在尝试模拟一个音阶,它有一个名称和一些相关的音符:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var scaleSchema = new Schema({
name: String,
displayName: String,
notes: [{type: String}]
});
module.exports = mongoose.model('Scale', scaleSchema);
但是,我不知道如何 "seed" 甚至访问此模型。我想用一些只加载一次的秤来填充它。我知道我可以要求这个模型并使用 new
来创建新条目,但是我必须将其放入节点应用程序的特定部分吗?是否有特定的最佳实践可供使用?我做错了吗?
我在这里很困惑,但感觉好像我几乎掌握了它的工作原理。有人能指出我正确的方向吗?
您可能想查看 .create() mongoose function。
我不确定这是否是唯一的方法,但您可能想添加类似
的内容var Scale = mongoose.model("Scale", scaleSchema);
module.exports = Scale; //instead of what you currently have for you last line
然后你可以做类似
的事情 Scale.create({name: varThatHasValName,
displayName: varThatHasValdisplayName,
notes: varThatHasValnotes}, function (err,scale));
当你想制作一个新的秤时,在你的代码的另一部分。
我最近使用 node 和 mongoose class,但我不是专家,但这可能是我会做的(如果我理解你的问题)。
您可以像创建对象一样创建新的数据库条目。这里以播种机class为例。
let mongoose = require('mongoose'),
User = require('../models/User');
module.exports = () => {
User.find({}).exec((err, users) => {
if (err) {
console.log(err);
} else {
if (users.length == 0) {
let adminUser = new User();
adminUser.username = 'admin';
adminUser.password = adminUser.encryptPassword('admin');
adminUser.roles = ['Admin'];
adminUser.save();
console.log('users collection seeded')
}
}
});
};
然后在另一个文件中您可以调用它,它将为您的数据库播种。
let usersCollectionSeeder = require('./usersCollectionSeeder');
usersCollectionSeeder();
希望这对您有所帮助。
至于结构,我喜欢有一个名为 "seeders" 的文件夹。在那里我有一个名为 databaseSeeder.js 的文件,它需要所有其他播种机,如 usersCollectionSeeder.js 然后调用函数。
这是我喜欢使用的示例结构。