如何查询mongoose嵌套数组

我有这样的架构

'use strict'; var mongoose = require('mongoose'); var Schema = mongoose.Schema; var TeacherSchema = new Schema({ education: [{degree: String, instituteName: String}], dob: Date, photoUrl: String, phoneNumber: String, institutes: [{type: mongoose.Schema.ObjectId, ref: 'Institute'}], subjects: [{ name: String, topics: [{ name: String, modules: [{ name: String, classes: [{ name: String, startTime: Date, endTime: Date, fee: Number }] }] }] }], created: {type: Date, default: Date.now} }) module.exports = mongoose.model('Teacher', TeacherSchema); 

我的问题是我如何查询嵌套数组? 具体来说,我想说,我想find所有的老师至less有一个主题/主题/模块/类的名字以“math”开头。 我怎么能用mongoose做到这一点?

看看这个工程…

 db.Teacher.find({$or: [{'subjects':{"$elemMatch":{'name':'Math'}}}, {'subjects.topics':{"$elemMatch":{'name':'Math'}}}, {'subjects.topics.modules.classes':{"$elemMatch":{'name':'Math'}}}] }) 

然而,我很好奇,知道为什么模块数组是需要的时候,它包含的是一个类的数组?

假设你想用通配符“ath”进行search

 db.stack30173606.find({$or: [ {'subjects':{"$elemMatch":{'name':'Math'}}}, {'subjects.topics':{"$elemMatch":{'name':'math'}}}, {'subjects.topics.modules':{"$elemMatch":{'name':'Math'}}}, {'subjects.topics.modules.classes.name':{"$in":[/math/]}} ] }) 

对于不区分大小写,请检查: 如何在Mongodb上进行不区分大小写的查询?