Javascript Mongoose深度查找查询

Javascript Mongoose深度查找查询,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我的MongoDB中有一个名为Post的集合,它是这样的: var PostSchema = new mongoose.Schema({ creator: { type: ObjectId, ref: 'User', required: true }, content: { type: String, required: true }, title: { type:

我的MongoDB中有一个名为Post的集合,它是这样的:

var PostSchema = new mongoose.Schema({
    creator: {
       type: ObjectId,
       ref: 'User',
       required: true
    },
    content: {
        type: String,
        required: true
    },
    title: {
        type: String,
        required: true
    },
    post_type: {
        type: String,
        required: true
    },
    view_type: {
        type: String,
        required: true
    },
    comments: [{
       type: ObjectId,
        ref: 'Comment'
    }],
    reports: [{
        type: ObjectId,
        ref: 'Report'
    }],
    attachments: [{
        type: ObjectId,
        ref: 'Attachment'
    }],
    created_at: {
        type: Date,
        default: Date.now
    },
    updated_at: {
        type: Date,
        default: Date.now
    }
});
和一个用户集合

var UserSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    course: {
        type: ObjectId,
        ref: 'Course',
        required: true
    },
    school: {
        type: ObjectId,
        ref: 'School',
        required: true
    },
    access: {
        type: ObjectId,
        ref: 'Access',
        required: true
    },
    classroom: {
        type: ObjectId,
        ref: 'Classroom'
    },
    created_at: {
        type: Date,
        default: Date.now
    },
    updated_at: {
        type: Date,
        default: Date.now
    }
});

我想要的是一种在Post上进行查询的方法,以获取与登录用户(在会话中保存)具有相同教室的所有Post,我尝试使用where和find,但没有成功,有什么方法可以这样做吗?

您可以使用如下嵌套查询:

User.find({classroom: req.session.user.classroom}).select('_id')
  .exec(function (err, users) {
    ids = users.map(function(user) {
      return user._id
    });
    Post.find({creator: {$in: ids}}, function(err, posts) {
      console.log(posts);
    });
});
这假设
req.session.user
是将用户保存在会话对象上的方式。如果没有,请根据需要进行修改


为了澄清,我们正在将用户的id映射到一个名为
ids
的数组,因为
$in
查询条件需要一个
objectID数组
除了@snozza的答案之外,您还可以使用
distinct(“'u id')
直接获取id数组,而无需将其映射到结果上


请参见

您是指与当前用户拥有相同教室的人创建的所有帖子吗?因为帖子上没有教室字段。是的,我希望所有帖子来自与登录用户相同教室的用户。