2012-04-10 171 views
35

我剛剛開始使用貓鼬。我有一個帶貓鼬的創建腳本,可以創建帶有示例數據的模式和數據庫。貓鼬模式創建

現在我寫實際的應用程序。我需要在每次運行應用程序時創建模式對象,還是已經可以以某種方式使用?

換句話說,我需要在使用貓鼬訪問數據庫或者只是第一次每一個應用程序運行這段代碼:

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

又會有怎樣的答案改變,如果我有setter方法/驗證的/ etc ?

回答

71

其中一個定義了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();將初始化所有您的架構對於給定的節點會話。

+0

是的,這很酷。使用這種方法,你對如何處理依賴關係(嵌入式文檔)有任何想法嗎? – 2012-06-14 21:29:06

+1

@AdrienSchuler依賴關係沒有問題。像往常一樣在其中一個文件中定義Embededd Documents。只要確保文件'second.js'指向文件'first.js'中的模型,則'first.js'在'model'變量中的'second.js'之前。 – freakish 2012-06-15 06:32:45

+0

這聽起來不錯,我會試試,謝謝! – 2012-06-15 07:56:11

4

每次運行應用程序以使用貓鼬嚮應用程序的架構註冊時,您都需要運行此初始化代碼。

當您的應用程序結束時,貓鼬不會存儲您的架構。因此,下次運行使用架構的應用程序時,您需要再次註冊您的架構。

但是,設置您的應用程序很容易。

下面是代碼的兩個鏈接,演示瞭如何在貓鼬中初始化模式。第一個是JavaScript,第二個是CoffeeScript。

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

JavaScript的演示只是一個應用程序。

CoffeeScript代碼有兩個獨立的應用程序。第一個存儲文件與MongoDB,第二個發現並顯示第一個應用程序存儲的文件。