Мне было поручено изменить существующий (большой) узел.js, используя mongoose
.Заселено неявное и сколько уровней он может пройти?
Схема имеет 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
, а не только идентификатором объекта. Это то, что нужно.
Теперь я должен добавить массив из 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
объектов одинаковы по типу и форме до answer
объектов в question
.
Однако, когда question
документ возвращается, каждый элемент answer.reaction
содержит только идентификатор объекта reaction
вместо полного reaction
объекта. Что я пропустил или как сделать запрос для выполнения соединения на основе типа ref
?
Версия mongodb 3.2.9, а mongoose - 4.0.4.
Спасибо. Ваш ответ дал мне ключ к решению проблемы. Моя версия монго вообще не имеет метода заполнения. Я потратил больше времени на перекодирование в существующий код и, наконец, нашел код, который вручную извлек объекты 'answer' из идентификаторов объектов, хранящихся в' question.answers', а затем добавил их в возвращаемый вопрос. –