2016-12-22 5 views
1

В узле 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. Если subChapters:[chapterSchema] в вашем agreementSchema, то используйте 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); 
}); 
Смежные вопросы