2016-12-22 16 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'は大文字と小文字を区別します' chapters'と 'Chapters'は異なっていることに注意してください –

答えて

2

$regex$optionsを試すことができます。

あなたの基準がオブジェクトである場合、{criteria}を見つける必要はありません。ただちにfind(criteriaを使用してください。 agreementSchemasubChapters:[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); 
}); 
関連する問題