mongoose深入查找查询

所以,我有一个名为Post的MongoDB中的集合,就像这样:

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上的查询,以获得与logging的用户相同的教室(保存在会话中)的所有职位,我试着用哪里,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查询条件需要一个ObjectIDs数组。