我正在使用MongoDb,我有一个带有mongoose(v4.0.1)的工作区架构:
var Workspace = new mongoose.Schema({
name: {
type: String,
required: true
},
userId: {
type: String,
required: true
},
createdOn: {
type: Date,
"default": Date.now
}
});
用户架构:
var User = new mongoose.Schema({
email: {
type: String,
required: true,
unique: true
},
organisation: {
type: String,
required: true
},
location: {
type: String,
required: true
},
verifyString: {
type: String
},
verified: {
type: Boolean,
default: false
},
password: {
type: String,
required: true
},
createdOn: {
type: Date,
"default": Date.now
},
isAdmin: {
type: Boolean,
default: false
}
});
因此Workspace userId
是ObjectID
文档中的User
。
当我以管理员身份登录时,我希望获得所有工作区以及拥有工作区的用户的电子邮件。
我正在做的事情变得非常混乱:
Workspace.find({}).exec.then(function(workspaceObects){
var userPromise = workspaceObects.map(function(workspaceObect){
// get the user model with workspaceObect.userId here
});
// somehow combine workspaceObjects and users
});
以上不起作用,变得非常混乱。基本上我必须遍历workspaceObjects
并从工作区userId
中检索用户对象。但是,因为它的所有承诺,它变得非常复杂,容易犯错误。
有更简单的方法吗?在SQL中,它需要一个简单的连接。我的架构错了吗?我可以在一个Mongoose查询中获取所有工作区及其用户所有者的电子邮件吗?
答案 0 :(得分:2)
var Workspace = new mongoose.Schema({
userId: {
type: String,
required: true,
ref: 'User' //add this to your schema
}
});
Workspace.find().populate('userId').exec( (err, res) => {
//you will have res with all user fields
});
答案 1 :(得分:1)
Mongo没有加入,但是mongoose提供了一个非常强大的工具来帮助你必须稍微更改模型并使用populate: Mongoose population
您必须对模型进行一些更改,并在工作区模型中获取用户模型的信息。
希望有所帮助