'mongo db join'에 해당되는 글 1건

mongodb는 nosql이다. no sql이 아닌 not only sql 이다.

sql 처럼 테이블 조인을 할 수는 없지만 이와 비슷한 기능을 제공해 준다.


바로 collection간의 population이라는 기능이다. 


There are no joins in MongoDB but sometimes we still want references to documents in other collections. This is where population comes in.

Population is the process of automatically replacing the specified paths in the document with document(s) from other collection(s). We may populate a single document, multiple documents, plain object, multiple plain objects, or all objects returned from a query. Let's look at some examples.


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

var storySchema = Schema({
  _creator : { type: Number, ref: 'Person' },
  title    : String,
  fans     : [{ type: Number, ref: 'Person' }]
});

var Story  = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);




위와 같이 두개의 collection을 정의하여 놓는다.

psersonSchema는 stroySchema를 embedding하고 있다. 

즉 일대다 관계이다. storySchema도 역시 personSchema를 참조하고 있다. 

이 경우에 population을 구현해보자.

우선 새로운 document를 만들고 이를 save하면서 stroy document도 save한다. 



var aaron = new Person({ _id: 0, 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 the _id from the person
  });
  
  story1.save(function (err) {
   
 if (err) return handleError(err);
    // thats it!
  });
})




그리고 다음과 같이 stroy collection에서 population을 구현할 수 있다.

_creator를 populating 함으로써 person객체를 받아와 객체안의 이름을 populating 하고 있는 것이다.



Story
.findOne({ title: 'Once upon a 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"
})



'데이터베이스 > mongodb' 카테고리의 다른 글

mongoose static method vs instance method  (0) 2015.02.11
node.js mongoose에서의 virtual model  (0) 2015.02.10
mongodb에서의 join  (1) 2015.02.10
mongodb modeling  (0) 2015.02.09
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요