Mongoose / mongoDB查询连接..但我来自一个SQL背景

我来自一个SQL背景,所以编写查询在SQL中,我join表是很简单,但我想我错过了在mongoose/ mongodb

基本上我知道Subscriber_ID(映射到User Collection中的文档)

我想拉的项目组,所有的用户所属的项目,所以如果我要写在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中必须有办法做类似的连接,因为这个types映射到一个模式对吗?

我的模式…..

项目组模式

 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} }); 

谢谢!

你只是一步之遥!

项目组架构:

 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); }) 

Mongodb中没有join。 我认为这个问题是一个很好的参考:

MongoDB和“join”

总而言之,对于通过关系数据库中的联接来解决的问题,必须采用不同的策略。 我会说你主要是做这两件事中的一件:

  • embedded:将信息embedded单个文档中,该文档将在关系数据库中分布在不同的表中。
  • join信息客户端:当您需要使用来自多个地方的信息时,您会多次查询,然后将这些信息放在您的客户端。