首页 文章

mongoose架构创建

提问于
浏览
41

我刚刚开始使用猫鼬 . 我有一个带有mongoose的创建脚本,它使用示例数据创建模式和数据库 .

现在我写实际的应用程序 . 每次我的应用程序运行时是否需要创建模式对象,或者它是否已经以某种方式提供?

换句话说,我是否需要在每个使用mongoose访问数据库的应用程序中运行此代码,或者只是第一次:

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

如果我有setter / validations / etc,答案会怎样改变?

2 回答

  • 4

    一个定义了 Schema ,因此应用程序了解如何将MongoDB中的数据映射到JavaScript对象 . Schema 是应用程序的一部分 . 它有 nothing 与数据库有关 . 它只将数据库映射到JavaScript对象 . 所以是 - 如果你想拥有漂亮的映射,你需要在需要它的 every 应用程序中运行此代码 . 它也适用于getter / setters / validations / etc.

    但请注意这样做:

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
    var Comments = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });
    mongoose.model("Comments", Comments);
    

    将注册 Schema globaly . 这意味着如果您正在运行的应用程序正在使用某些外部模块,那么您可以在此模块中使用

    var mongoose = require('mongoose');
    var Comments = mongoose.model("Comments");
    Comments.find(function(err, comments) {
        // some code here
    });
    

    (请注意,在使用此代码之前,您实际上需要注册 Schema ,否则将抛出异常) .

    但是,所有这些只能在一个节点会话中运行,因此如果您正在运行需要访问 Schema 的另一个节点应用程序,则需要调用注册码 . 因此,在单独的文件中定义所有模式是个好主意,例如 comments.js 可能看起来像这样

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
    
    module.exports = function() {
        var Comments = new Schema({
            title     : String
          , body      : String
          , date      : Date
        });
        mongoose.model("Comments", Comments);
    };
    

    然后创建文件 models.js ,可能看起来像这样

    var models = ['comments.js', 'someothermodel.js', ...];
    
    exports.initialize = function() {
        var l = models.length;
        for (var i = 0; i < l; i++) {
            require(models[i])();
        }
    };
    

    现在调用 require('models.js').initialize(); 将初始化给定节点会话的所有Schema .

  • 75

    每次运行应用程序时都需要运行此初始化代码,以便使用mongoose注册应用程序的Schema .

    当您的应用结束时,mongoose不会存储您的架构 . 因此,下次运行使用Schema的应用程序时,需要再次注册Schema .

    但是,设置您的应用程序非常容易 .

    这里有两个代码链接,演示了如何在mongoose中初始化模式 . 第一个是JavaScript,第二个是CoffeeScript .

    https://github.com/fbeshears/register_models

    https://github.com/fbeshears/register_coffee_models

    JavaScript演示只是一个应用程序 .

    CoffeeScript代码有两个独立的应用程序 . 第一个使用MongoDB存储文档,第二个查找并显示第一个应用程序存储的文档 .

相关问题