2012-10-06 4 views
10

나는 꽤 이해하지 못한다. 나는 Node.JS를위한 데이터베이스에 대한 연구를 해왔고, 거의 모든 사람들이 MongoDB 나 CouchDB 같은 NoSQL 타입의 데이터베이스를 Node와 함께 사용할 것을 추천하고있다.NoSQL 또는 SQL을 사용하는 Node.JS?

그러나 NoSQL은 관계형 데이터에별로 좋지 않다는 것을 알았습니다.하지만 대부분의 비즈니스 애플리케이션 (또는 소셜 네트워킹 유형 앱)에는 관계형 데이터가 있습니다.

예를 들어, Node.JS에 학생, 교사, 수업이있는 학교의 응용 프로그램을 작성한다고합시다. 거기에 많은 관계가 있다는 것을 알 수 있습니다. NoSQL을 사용하는 것이 좋습니다.

답변

5

MongoDB는 종종 비동기적인 특성과 JSON 기반 mongoDB 문서 구조로 자바 스크립트 JSON 객체를 사용하기 때문에 Node.js와 쌍을 이룹니다. 즉, mongoDB는 특히 복잡한보고를해야 할 때 단점이 있습니다. 내가 발견 한 더 나은 설명 중 하나는 mongo에서 쉬운 데이터 액세스를 복제하려면 mysql에 조인이 필요하지만 데이터를 다른 방식으로 조인하려면 SQL에서 간단하지만 훨씬 복잡합니다. 몽고.

5

노드 용 몽구스를 살펴보십시오. 익스프레스 애플리케이션 용 모델을 정의 할 수 있습니다. .populate()를 사용하여 RDBMS 시스템에서 외래 키가 될 항목에 효과적으로 조인 할 수 있습니다.

http://mongoosejs.com/docs/populate.html

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema 

var PersonSchema = new Schema({ 
    name : String, 
    age  : Number, 
    stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] 
}); 

var StorySchema = new Schema({ 
    _creator : { type: Schema.Types.ObjectId, ref: 'Person' }, 
    title : String, 
    fans  : [{ type: Schema.Types.ObjectId, ref: 'Person' }] 
}); 

var Story = mongoose.model('Story', StorySchema); 
var Person = mongoose.model('Person', PersonSchema); 

저장 심판

다른 문서

저장 심판은 그냥 ObjectId가 지정 일반적하며 Object를 저장 동일한 방식으로 작동 :

var aaron = new Person({ name: 'Aaron', age: 100 }); 

aaron.save(function (err) { 
    if (err) return handleError(err); 

    var story1 = new Story({ 
    title: "Once upon a timex.", 
    _creator: aaron._id // assign an ObjectId 
    }); 

    story1.save(function (err) { 
    if (err) return handleError(err); 
    // thats it! 
    }); 
}) 

인구 그래서

을 우리는 특별한 일을하지 않았습니다. 우리는 단순히 사람과 이야기를 만들었습니다. 이제 우리 이야기의 _creator를 채워 보겠습니다.

Story 
.findOne({ title: /timex/ }) 
.populate('_creator') 
.exec(function (err, story) { 
    if (err) return handleError(err); 
    console.log('The creator is %s', story._creator.name); // prints "The creator is Aaron" 
})