我有sql背景,所以用sql编写连接表的查询非常简单,但我想我在mongoose/mongodb中遗漏了这一点。
基本上我知道Subscriber_ID (它映射到用户集合中的文档)
我想拉出项目组,其中包含用户所属的所有项目,因此,如果我用pseduo sql编写这段代码,它将如下所示
Select
ProjectGroup.title,
Project.Title
FROM
ProjectGroup,
Project,
User
WHERE
User.id = req.body.subscriber_id
AND Project.subscriber_id = User.id
AND ProjectGroup.project_id = Project.id
在mongoose/mongodb中必须有一种类似的连接方式,因为类型映射到一个模式,对吧?
我的模式..。
项目组架构
var ProjectGroupSchema = new Schema({
title : String
, projects : [ { type: Schema.Types.ObjectId, ref: 'Project' } ]
});
项目架构
var ProjectSchema = new Schema({
title : {type : String, default : '', required : true}
, subscribers : [{ type: Schema.Types.ObjectId, ref: 'User' }]
});
用户架构
var UserSchema = new Schema({
first_name : {type: String, required: true}
, last_name : {type: String, required: true}
});
谢谢!
发布于 2013-01-17 05:05:06
您只差一步就到了!
项目组架构:
var ProjectGroupSchema = new Schema({
title : String
});
项目架构:
var ProjectSchema = new Schema({
title : {type : String, default : '', required : true},
group : {type: Schema.Types.ObjectId, ref: 'ProjectGroup' },
_users : [{type: Schema.Types.ObjectId, ref: 'User' }]
});
用户架构:
var UserSchema = new Schema({
first_name : {type: String, required: true},
last_name : {type: String, required: true},
subscribing : [{type: Schema.Types.ObjectId, ref: 'Project' }]
});
然后,您可以执行以下操作:
user.findById(req.userId)
.populate('subscribing')
.exec(function(err, user){
console.log(user.subscribing);
})
或者:
project.find({
subscriber : req.userId
})
.populate('subscriber')
.populate('group')
.exec(function(err, projects){
console.log(projects);
})
https://stackoverflow.com/questions/14363065
复制相似问题