一个定义就是
Schema让应用程序理解如何将数据从MongoDB映射到Javascript对象。
Schema是应用程序的一部分。它与数据库
无关 。它仅将数据库映射到Javascript对象。所以是的-如果您想获得漂亮的映射,则需要在 每个
需要它的应用程序中运行此代码。它也适用于getters / setters / validations / etc。
但是请注意,这样做:
var mongoose = require('mongoose');var Schema = mongoose.Schema; // <-- EDIT: missing in the original postvar 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 pre here});(请注意,您实际上需要
Schema在使用此代码之前注册,否则将引发异常)。
但是,所有这些操作仅在一个节点会话内有效,因此,如果您正在运行另一个需要访问的节点应用程序
Schema,则需要调用注册代码。因此,最好在单独的文件中定义所有模式,例如,
comments.js可能看起来像这样
var mongoose = require('mongoose');var Schema = mongoose.Schema; // <-- EDIT: missing in the original postmodule.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();将初始化给定节点会话的所有模式。


