복붙노트

[MONGODB] 몽구스 / MongoDB의 쿼리는 조인 ..하지만 난 SQL 배경에서 온

MONGODB

몽구스 / MongoDB의 쿼리는 조인 ..하지만 난 SQL 배경에서 온

나는 테이블을 조인 SQL에서 쿼리를 작성하는 것은 매우 간단합니다, 그래서 나는 SQL 배경에서 오는하지만 난 몽구스 / MongoDB를에 있다는 말이냐 생각

기본적으로 나는 (사용자 컬렉션에서 문서에 매핑)을 Subscriber_ID을 알고

나는 사용자가 너무 속한 나는 그것이 같은 것 SQL pseduo이 작성했습니다 경우 모든 프로젝트와 프로젝트 그룹을 끌어 할

Select 
  ProjectGroup.title, 
  Project.Title 
FROM 
  ProjectGroup, 
  Project, 
  User 
WHERE 
  User.id = req.body.subscriber_id 
  AND Project.subscriber_id = User.id 
  AND  ProjectGroup.project_id = Project.id

유형이 스키마 오른쪽으로 매핑하기 때문에 비슷한 몽구스 / MongoDB를 조인 할 수있는 방법이 있어야합니다?

내 스키마 .....

프로젝트 그룹 스키마

var ProjectGroupSchema = new Schema({
    title             : String
  , projects          : [ { type: Schema.Types.ObjectId, ref: 'Project' } ]
});

프로젝트 스키마

var ProjectSchema = new Schema({
    title         : {type : String, default : '', required : true}
  , subscribers   : [{ type: Schema.Types.ObjectId, ref: 'User' }]
});

사용자 스키마

var UserSchema = new Schema({
    first_name    : {type: String, required: true}
  , last_name     : {type: String, required: true}
});

고맙습니다!

해결법

  1. ==============================

    1.당신은 멀리 한 단계입니다!

    당신은 멀리 한 단계입니다!

    프로젝트 그룹 스키마 :

    var ProjectGroupSchema = new Schema({
        title             : String
    });
    

    프로젝트 스키마 :

    var ProjectSchema = new Schema({
        title         : {type : String, default : '', required : true},
        group         : {type: Schema.Types.ObjectId, ref: 'ProjectGroup' },
        _users    : [{type: Schema.Types.ObjectId, ref: 'User' }]
    });
    

    사용자 스키마 :

    var UserSchema = new Schema({
        first_name    : {type: String, required: true},
        last_name     : {type: String, required: true},
        subscribing   : [{type: Schema.Types.ObjectId, ref: 'Project' }]
    });
    

    그런 다음 다음을 수행 할 수 있습니다 :

    user.findById(req.userId)
         .populate('subscribing')
         .exec(function(err, user){
              console.log(user.subscribing);
         })
    

    또는:

    project.find({
            subscriber : req.userId
          })
         .populate('subscriber')
         .populate('group')
         .exec(function(err, projects){
              console.log(projects);
         })
    
  2. ==============================

    2.더는 MongoDB를 조인이 없습니다. 내가 생각하는이 질문은 좋은 참조입니다 :

    더는 MongoDB를 조인이 없습니다. 내가 생각하는이 질문은 좋은 참조입니다 :

    MongoDB를하고는 "조인"

    요약하면, 다른 전략은 관계형 DB에 조인을 통해 해결 될 문제가 MongoDB를 함께 채택되어야한다. 난 당신이 주로 최종까지이 두 가지 중 하나를 수행 말할 것입니다 :

  3. from https://stackoverflow.com/questions/14363065/mongoose-mongodb-query-joins-but-i-come-from-a-sql-background by cc-by-sa and MIT license