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 然后调用函数。

这是我喜欢使用的示例结构。

https://github.com/NikolayKolibarov/ExpressJS-Development