2016-12-22 77 views
1

在Node js mongoose中需要搜索以下模式級別的文章描述。貓鼬怎麼可能呢? 我曾嘗試使用$ elemMatch和它不工作。模式級別如下。節點js mongoose通過深層嵌套文檔查找

var articleSchema = new Schema({ 
    name: { type: String, required: true }, 
    displayName: { type: String }, 
    description: { type: String }, 

}); 

mongoose.model('Article', articleSchema); 

var subChapterSchema = new Schema({ 
    name: {type: String, required: true}, 
    displayName: {type: String}, 
    Articles:[articleSchema], 


}); 

mongoose.model('SubChapter', subChapterSchema); 

var chapterSchema = new Schema({ 
    name: {type: String, required: true }, 
    displayName: {type: String }, 
    subChapters: [subChapterSchema], 

}); 

mongoose.model('Chapter', chapterSchema); 

var agreementSchema = new Schema({ 
    name: {type: String, required: true }, 
    displayName: {type: String }, 
    Chapters: [chapterSchema], 

}); 

mongoose.model('Agreement', agreementSchema); 

我已經嘗試如下,但它不工作。

var regex = new RegExp(text, "i"); 

    var criteria = { 
    Chapters.subChapters.Articles : { 
                $elemMatch: { 
                 description:regex 
                } 
                } 
             } 

Agreement.find({criteria},'name displayName',function(err,docs){ 
     if (err) 
      console.log('error occured in the database'); 
     console.log(docs); 
    }); 
+0

'子章節時,你應該使用"":[chapterSchema]'或'章節:[chapterSchema]''中'agreementSchema? –

+0

章節:[chapterSchema] –

+0

記住'key'區分大小寫'章節'和'章節'是不同的 –

回答

2

您可以$regex$options嘗試。

當你的條件是一個對象時,無需使用{criteria}找到只需使用find(criteria。 如果您的agreementSchema中的subChapters:[chapterSchema]然後在我的示例中使用subChapters.subChapters.Articles.description:使用chapters.subChapters.Articles.description:

,並希望找到嵌套場

var text = 'search text'; 

var criteria = { 
    "chapters.subChapters.Articles.description": { $regex: text, $options: 'i' } 
}; 

Agreement.find(criteria, 'name displayName', function (err, docs) { 
    if (err) 
    console.log('error occured in the database'); 
    console.log(docs); 
});