node.js - node js mongoose find by deeply nested documents -
in node js mongoose need search article description in following schema levels. how can possible mongoose. have tried using $elemmatch , not working. schema level follows.
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);
i have tried follows.but not working.
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 database'); console.log(docs); });
you can try $regex
, $options
.
when criteria object no need use {criteria}
in find use find(criteria
. if subchapters:[chapterschema]
in agreementschema
use subchapters.subchapters.articles.description:
in example used chapters.subchapters.articles.description:
.
and should use ""
when want find nested field
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 database'); console.log(docs); });
Comments
Post a Comment