2016-11-24 51 views
0

我的任務是使用mongoose修改現有的(大型)node.js網頁。是隱含的,有多少層次可以去?

架構具有Question如下可鏈接到的Answer數組:

var QuestionSchema = mongoose.Schema({ 
    text: { type: String }, 
    ... 
    answers: [{type: mongoose.Schema.Types.ObjectId, ref: 'Answer'}], 
    ... 
}); 

var AnswerSchema = mongoose.Schema({ 
    text: { type: String }, 
    .... 
    question: { 
     type: mongoose.Schema.ObjectId, 
     ref: Question 
    }, 
... 
});  
var Question = mongoose.model('Story', QuestionSchema); 
var Answer = mongoose.model('Answer', AnswerSchema); 

我無法找到populate方法的任何實例中的代碼被使用,但一個Question文檔的查詢總是返回整個answer對象的數組,而不僅僅是對象ID。這是需要的。

我現在必須將reaction對象的數組添加到answer。我用下面的:

var Answer = mongoose.model('Answer', AnswerSchema); 
var ReactionSchema = mongoose.Schema({ 
    text: { type: String }, 
    .... 
    answer: { 
     type: mongoose.Schema.ObjectId, 
     ref: Answer, 
     //required: true 
    }, 
    ... 
}); 

我加入下列至Answer模式:

reactions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Reaction'}] 
//where var Reaction = mongoose.model('Reaction', ReactionSchema); 

我能救reaction對象,當我檢查的answer數據庫的內容,該reaction對象在question中與answer對象的類型和形式相同。

然而,返回question文檔時,的answer.reaction每個元素包含只是reaction,而不是完整reaction對象的對象ID。我省略了什麼或者如何根據ref類型使查詢執行連接?

mongodb版本是3.2.9,貓鼬是4.0.4。

回答

0

如何查詢問題?這是你如何解決嵌套引用:

Question.findById(id).populate({ 
    path: 'answer', 
    model: 'Answer', 
    populate: { 
    path: 'reaction', 
    model: 'Reaction' 
    } 
}).exec(function(err, data){}); 

這裏是鏈接到貓鼬文檔:Mongoose Docs Deep Populate

+0

感謝。你的回答給了我解決問題的線索。我的mongo版本根本沒有填充方法。我花了更多的時間挖掘現有的代碼,最終找到了從'question.answers'中存儲的對象id手動檢索'answer'對象的代碼,然後將它們添加到返回的問題文檔中。 –