1

填充這裏有兩個集合模式

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, 
    ... 
}) 

我想在同一個查詢activity.begin_date , registration.id , registration.email。我能怎麼做?我在網上找到了一些解決方案,但仍然不知道是使用填充還是聚合$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

什麼問題你得到?你還可以添加示例數據。和結果數據。通過查看你的代碼,我可以找到任何問題。 $查找應該工​​作 – 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(值)更改爲ObjectId(「xxxxxxx」)?因爲我被告知activty_id被裁定。我無法改變它的價值 –

+0

你對規則有什麼意義? Mongo自動爲您提供主鍵(_id)!所以你不需要爲活動集合定義''activity_id''。 – Loint