使用Mongoose查找文档,父母和孩子都匹配查询

我有MongoDB的以下两个Mongoose模式:

// Parent Schema var parentSchema = mongoose.Schema({ status: { type: String, required: true } child: { type: mongoose.Schema.Types.ObjectId, ref: 'Child', required: true }, ... } //Child schema var childSchema = mongoose.Schema({ status: { type: String, required: true } ... } 

我想查找状态=已发布的所有父文档以及子文档状态=已发布的位置。 以下都没有给出预期的结果:

 //This returns no documents Parent.find({ 'status': 'published' }) .where({ 'child.status': 'published' }) .populate('child') .exec(function (err, results) { //This returns no documents Parent.find({ 'status': 'published' }) .populate('child') .where({ 'child.status': 'published' }) .exec(function (err, results) { //This filters by parent status but not child status Parent.find({ status: 'published' }) .populate({ path: 'child', match: { 'child.status': 'published' } }) .exec(function (err, results) { //This returns no documents Parent.find( {status: 'published', 'child.status': 'published'}, {child:{$elemMatch:{status: 'published'}}}) .exec(function (err, results) { 

这是正确的方法还是应该使用不同的技术?

在MongoDB中,不可能在单个查询中查询多个集合。 如果Child作为子文档embedded到Parent则可以对child.status执行查询,但由于它是Parent引用的单独集合,因此您不能这样做。

你可以用水线,它更像ORM。

Interesting Posts