このトピックに関する Q/A が 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}};
必要なもの:
姓が「Robertson」の人が設立したすべての会社を検索します
私が試したこと:
Company.find({'founder.id': 'Robertson'}, function(err, companies){
console.log(companies); // getting an empty array
});
次に、 Person は埋め込まれていないが参照されていると考えたので、 populate を使用してfounder-Personを入力し、「Robertson」の姓で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
});
Person の ID を文字列として使用して、引き続き会社を照会できます。しかし、あなたが理解できるように、それはまさに私が欲しいものではありません
Company.find({'founder': '525cf76f919dc8010f00000d'}, function(err, companies){
console.log(companies); // this works
});