2014-02-20 73 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。