2014-02-20 77 views
1

我有一个MongoDB的以下2种猫鼬模式:使用猫鼬查找文档,其中父母和孩子都匹配查询

// 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) { 

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

回答

2

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

0

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