Javascript Mongoose深度查找查询
我的MongoDB中有一个名为Post的集合,它是这样的: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:
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数组,而无需将其映射到结果上
请参见您是指与当前用户拥有相同教室的人创建的所有帖子吗?因为帖子上没有教室字段。是的,我希望所有帖子来自与登录用户相同教室的用户。