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信息客户端:当您需要使用来自多个地方的信息时,您会多次查询,然后将这些信息放在您的客户端。