2015-04-01 3 views
1

Скажем, у меня есть коллекции/документы, как показано ниже:Можно заполнить два уровня?

коллекция вопрос:

{ 
    _id: ObjectId("0000"), 
    title: "test question", 
    survey: ObjectId("1234") //abbreviated for question assume this is a legit object id 
} 

коллекция Опрос:

{ 
    _id: ObjectId("1234"), 
    title: "survey title!", 
    user: ObjectId("5678") 
} 

коллекции пользователя:

{ 
    _id: ObjectId("5678"), 
    Name: "Abe" 
} 

Есть ли способ для меня, чтобы назвать что-то вроде:

questions.findOne({_id: "0000"}).populate("survey.user") 

, чтобы получить информацию о пользователе вместе с вопросом? Я понимаю, что я могу заселить ближайших родителей question, но мне любопытно, можно ли это сделать для бабушек и дедушек.

ответ

1

Вам необходимо сделать это в два этапа; первое заполнение survey, а затем заполнение survey.user с помощью отдельного вызова Model.populate:

questions.findOne({_id: '0000'}) 
    .populate('survey') 
    .exec(function(err, question) { 
     questions.populate(
      question, 
      { path: 'survey.user', model: 'User'}, 
      function(err, question) {...}); 
    }); 
Смежные вопросы