使用Mongoose查找文档,父母和孩子都匹配查询
我有MongoDB的以下两个Mongoose模式:
// Parent Schema var parentSchema = mongoose.Schema({ status: { type: String, required: true } child: { type: mongoose.Schema.Types.ObjectId, ref: 'Child', required: true }, ... } //Child schema var childSchema = mongoose.Schema({ status: { type: String, required: true } ... }
我想查找状态=已发布的所有父文档以及子文档状态=已发布的位置。 以下都没有给出预期的结果:
//This returns no documents Parent.find({ 'status': 'published' }) .where({ 'child.status': 'published' }) .populate('child') .exec(function (err, results) { //This returns no documents Parent.find({ 'status': 'published' }) .populate('child') .where({ 'child.status': 'published' }) .exec(function (err, results) { //This filters by parent status but not child status Parent.find({ status: 'published' }) .populate({ path: 'child', match: { 'child.status': 'published' } }) .exec(function (err, results) { //This returns no documents Parent.find( {status: 'published', 'child.status': 'published'}, {child:{$elemMatch:{status: 'published'}}}) .exec(function (err, results) {
这是正确的方法还是应该使用不同的技术?
在MongoDB中,不可能在单个查询中查询多个集合。 如果Child
作为子文档embedded到Parent
则可以对child.status
执行查询,但由于它是Parent
引用的单独集合,因此您不能这样做。
你可以用水线,它更像ORM。