【发布时间】:2013-10-23 05:29:32
【问题描述】:
stackoverflow 上似乎有很多关于此主题的 Q/A,但我似乎无法在任何地方找到确切的答案。
我有什么:
我有公司和个人模型:
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 来填充创始人-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
});
【问题讨论】:
标签: node.js mongodb mongoose populate