其中一個定義了Schema
,所以應用程序理解如何將數據從MongoDB映射到JavaScript對象。 Schema
是應用程序的一部分。它有什麼都沒有與數據庫做。它只將數據庫映射到JavaScript對象。所以是的 - 如果你想有很好的映射,你需要運行這個代碼每需要它的應用程序。它也適用於getters/setters/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);
將globaly註冊Schema
。這意味着,如果你使用一些外部模塊運行的應用程序,然後在此模塊中,你可以簡單地使用
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();
將初始化所有您的架構對於給定的節點會話。
是的,這很酷。使用這種方法,你對如何處理依賴關係(嵌入式文檔)有任何想法嗎? – 2012-06-14 21:29:06
@AdrienSchuler依賴關係沒有問題。像往常一樣在其中一個文件中定義Embededd Documents。只要確保文件'second.js'指向文件'first.js'中的模型,則'first.js'在'model'變量中的'second.js'之前。 – freakish 2012-06-15 06:32:45
這聽起來不錯,我會試試,謝謝! – 2012-06-15 07:56:11