똑같은 삽질은 2번 하지 말자

Mongoose 의 populate 본문

Node

Mongoose 의 populate

곽빵 2019. 12. 14. 17:01

populate : Mongoose의 document(Table)이 다른 document의 ObjectId를 사용하고 있을때,

               해당 ObjectId의 요소들을 가져오기 위한 편리한 기능이다.

 


var PostSchema = mongoose.Schema({
    writer: {
        type: mongoose.Schema.ObjectId, 
        ref: 'users7' // users7 컬렉션을 Reference
    }
});


var UserSchema = mongoose.Schema({
        email: {
            type: String,
            'default': ''
        },
        hashed_password: {
            type: String,
            'default': ''
        },
        name: {
            type: String,
            index: 'hashed',
            'default': ''
        },
        salt: {
            type: String
        },
        created_at: {
            type: Date,
            index: {
                unique: false
            },
            'default': Date.now
        },
        updated_at: {
            type: Date,
            index: {
                unique: false
            },
            'default': Date.now
        },
        provider: {
            type: String,
            'default': ''
        },
       
    });

 

users7 collection을 참조해서 name, provider, email 요소만 가져오겠다는 populate

populate로 writer를 가져오지 않으면 그냥 Objectid 만 찍혀있기때문에 이게 뭔지 알 수가 없다.

PostSchema.statics = { 
        list: function(options,callback){
            var criteria = options.criteria || {};
            // writer 의 name provider email 만 가져와서 보겠다.
            this.find(criteria)
                .populate('writer','name provider email')
                .sort({'created_at': -1})
                .limit(Number(options.perPage))
                .skip(options.perPage * options.page)
                .exec(callback);
        }
    }
Comments