Кажется, что на stackoverflow есть много вопросов и ответов по этой теме, но я нигде не могу найти точного ответа.
Что у меня есть:
У меня есть модели Company и Person:
var mongoose = require('mongoose');
var PersonSchema = new mongoose.Schema{
name: String,
lastname: String};
// company has a reference to Person
var CompanySchema = new mongoose.Schema{
name: String,
founder: {type:Schema.ObjectId, ref:Person}};
Что мне нужно:
Найдите все компании, которые основали люди с фамилией «Робертсон».
Что я пробовал:
Company.find({'founder.id': 'Robertson'}, function(err, companies){
console.log(companies); // getting an empty array
});
Затем я понял, что Person не встроен, но на него ссылаются, поэтому я использовал populate для заполнения основателя-Person, а затем попытался использовать find с фамилией «Робертсон».
// 1. retrieve all companies
// 2. populate their founders
// 3. find 'Robertson' lastname in populated Companies
Company.find({}).populate('founder')
.find({'founder.lastname': 'Robertson'})
.exec(function(err, companies) {
console.log(companies); // getting an empty array again
});
Я все еще могу запрашивать компании с идентификатором человека в виде строки. Но это не совсем то, что я хочу, как вы понимаете.
Company.find({'founder': '525cf76f919dc8010f00000d'}, function(err, companies){
console.log(companies); // this works
});