1

에 채우는 것은 여기에 내가 같은 쿼리에서 activity.begin_date , registration.id , registration.email 원하는 두 개의 컬렉션 '스키마

var activitySchema = new Schema({ 

    activity_id: {type: String, index: {unique: true}, required: true}, 

    begin_date : String, 
    ... 
}) 

var registrationSchema = new Schema({ 

    activity_id: {type: String, index: {unique: true}, required: true}, 

    registration_id: {type:String, trim: true, index: true ,required: true }, 

    email  : String, 
    ... 
}) 

있습니다. 어떻게해야합니까? 인터넷에서 몇 가지 솔루션을 찾았지만 채우기 또는 집계를 사용하는지 여부는 아직 알지 못합니다. $lookup (새 것 같습니다).

다음은 내가 시도한 방법이지만 전혀 작동하지 않는 방법입니다.

models.Registration.aggregate([ 

     { 
      $lookup: { 
       from: "Activity", 
       localField: "activity_id", 
       foreignField: "activity_id", 
       as: "activity_docs" 
      } 
     }, 
     {"$unwind" : "activity_docs"}, 

    ], function(err , result){ 
     if(result){ 
      fullDoc = result; 
     }else{ 
      next(err); 
     } 
    }) 
+2

당신은 문제가 무엇을 얻고있다.? 샘플 데이터를 추가 할 수 있습니까? 결과 데이터. 귀하의 코드를보고 나는 어떤 문제를 찾을 수 있습니다. $ lookup이 작동해야합니다 – enRaiser

+0

컴파일러가이 코드를 지나쳐서 "$ lookup이 정의되어 있지 않습니다" –

+0

저는 그런 바보였습니다 ... $ lookup을 위해서는 MongoDB 3.2가 필요합니다. 내 것은 2.6 –

답변

1

activity_id는 ObjectId 타입이어야한다. ObjectId documentation

pupoluate을 사용하려면 ref을 다른 스키마에 사용해야합니다. Population documentation

var activitySchema = new Schema({ 

    begin_date : String, 
    ... 
}) 
var Activity= mongoose.model('Activity', activitySchema); 


var registrationSchema = new Schema({ 

    activity_id: {type: Schema.Types.ObjectId, ref : 'Activity', required: true}, 
    email  : String, 
    ... 
}) 



    var Registration = mongoose.model('Registration', registrationSchema); 

그래서 쿼리와 같은 :

var query = Registration.find({_id: 'registration_id parameter'}); 
query.select('_id activity_id email'); 
query.populate('activity_id','_id begin_date'); 
query.exec(function(error,result){ 
    if(error){ 
     /// handle error 
    }else{ 
     // handle result 
    } 
}); 
+0

도움에 감사드립니다. 내 activity_id (value)를 ObjectId ("xxxxxxx")로 변경해야한다는 의미입니까? 사촌 나는 activty_id가 통치한다고 들었어. 나는 그 가치를 바꿀 수 없다. –

+0

규칙에 대해서는 무엇을 의미 하는가? Mongo 자동으로 기본 키 (_id)를 제공합니다! 따라서 활동 수집을 위해''activity_id''를 정의 할 필요가 없습니다. – Loint

관련 문제