2012-04-10 6 views
35

방금 ​​몽구스로 시작했습니다. 나는 샘플 데이터로 스키마와 db를 생성하는 몽구스로 생성 스크립트를 가지고있다.몽구스 스키마 생성

이제 실제 응용 프로그램을 작성합니다. 내 응용 프로그램이 실행될 때마다 스키마 객체를 만들어야합니까, 아니면 어떻게 든 사용할 수 있습니까?

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

어떻게 것이라고 응답 변화 내가 가지고있는 경우 세터/검증/등 : 즉

내가 데시벨하거나 처음에 액세스 할 수 몽구스를 사용하는 모든 응용 프로그램에서이 코드를 실행해야합니까 ?

답변

71

하나는 Schema을 정의하므로 애플리케이션은 MongoDB에서 JavaScript 객체로 데이터를 매핑하는 방법을 이해합니다. Schema은 응용 프로그램의 일부입니다. 그것은 데이터베이스와 함께아무것도 가지고있다. 데이터베이스 만 JavaScript 객체로 매핑합니다. 그래서 예 - 멋진 매핑을 원한다면 에이 코드를 실행해야합니다. 모든 코드는입니다. getters/setters/validation/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); 

globaly Schema을 등록합니다. 이것은 당신이 어떤 외부 모듈을 사용하고 실행중인 응용 프로그램이,이 모듈에서 간단히 사용할 수 있는지

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

는 (그렇지 않으면 예외가 될 것입니다, 당신이 실제로이 코드를 사용하기 전에 Schema를 등록 할 필요가 있습니다 것을 의미한다 던져).

그러나이 모든 것은 하나의 노드 세션 내에서만 작동하므로 Schema에 액세스해야하는 다른 노드 응용 프로그램을 실행중인 경우 등록 코드를 호출해야합니다. 그래서 comments.js은 다음 지금 모두를 초기화합니다 require('models.js').initialize();를 호출이

var models = ['comments.js', 'someothermodel.js', ...]; 

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

처럼 보일 수 있습니다 파일 models.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); 
}; 

처럼 보일 수 있습니다 예를 들어 별도의 파일에있는 모든 스키마를 정의하는 것이 좋습니다이며, 주어진 노드 세션에 대한 스키마의.

+0

그래, 이거 멋지다. 이 방법을 사용하면 종속성 (포함 된 문서)을 처리하는 방법에 대한 아이디어가 있습니까? –

+1

@AdrienSchuler 종속성에는 아무런 문제가 없습니다. 파일 중 하나에 평소대로 Embededd Documents를 정의합니다. 파일'second.js'가'first.js' 파일의 모델을 참조한다면,'first.js'는'model' 변수의'second.js' 전에갑니다. – freakish

+0

대단한데, 나도해볼 께, 고마워! –

4

앱의 스키마를 몽구스로 등록하기 위해 앱을 실행할 때마다이 초기화 코드를 실행해야합니다.

앱이 종료되면 mongoose는 스키마를 저장하지 않습니다. 따라서 다음에 스키마를 사용하는 응용 프로그램을 실행할 때 스키마를 다시 등록해야합니다.

그러나 앱을 설정하는 것이 매우 쉽습니다.

다음은 몽구스에서 스키마를 초기화하는 방법을 보여주는 두 개의 링크입니다. 첫 번째는 JavaScript로, 두 번째는 CoffeeScript로 진행됩니다.

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

자바 스크립트 데모는 하나의 응용 프로그램입니다.

CoffeeScript 코드에는 2 개의 별도 앱이 있습니다. 첫번째는 MongoDB로 문서를 저장하고 두 번째는 첫 번째 app에 저장된 문서를 찾아서 표시합니다.

관련 문제