node.js - Mongoose 模式创建

标签 node.js mongodb mongoose

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

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

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

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

如果我有 setter/validations/etc,答案会如何变化?

最佳答案

定义 Schema 以便应用程序了解如何将数据从 MongoDB 映射到 JavaScript 对象。 Schema 是应用程序的一部分。它与数据库无关。它仅将数据库映射到 JavaScript 对象。所以是的 - 如果你想拥有漂亮的映射,你需要在 每个 需要它的应用程序中运行此代码。它也适用于 getter/setter/validations/等。

但是请注意,这样做:

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。这意味着如果您正在运行的应用程序正在使用一些外部模块,那么在这个模块中您可以简单地使用

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

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

然而,所有这些都只在一个 Node session 中起作用,所以如果您正在运行另一个需要访问 Schema 的 Node 应用程序,那么您需要调用注册码。因此,在单独的文件中定义所有 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(); 将为给定 Node session 初始化所有架构。

关于node.js - Mongoose 模式创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081611/

相关文章:

javascript - Mongoose 使用方法将模式添加到模式中

javascript - 缓存原型(prototype)函数不会缓存它所属的对象

javascript - 如何在 Node.js 中的同一进程内监听同一地址上的不同 UDP 端口

node.js - 需要一个使用共享数据库的 Electron 应用程序的解决方案

python - 在要插入 mongodb 的字典列表中设置唯一字段

node.js - find() 查询的更短方法

javascript - 在我的第一个 node.js 代码中遇到问题,我不明白哪里出了问题

mongodb - mongoDB 中的 Group by 与属性构造

linux - 我如何加入 MongoDB 中的字段?

mongodb - 快速存储大量文档到 mongoose