首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mongoose/mongoDB查询联接..但我有sql背景

Mongoose/mongoDB查询联接..但我有sql背景
EN

Stack Overflow用户
提问于 2013-01-17 00:28:25
回答 1查看 42.7K关注 0票数 24

我有sql背景,所以用sql编写连接表的查询非常简单,但我想我在mongoose/mongodb中遗漏了这一点。

基本上我知道Subscriber_ID (它映射到用户集合中的文档)

我想拉出项目组,其中包含用户所属的所有项目,因此,如果我用pseduo sql编写这段代码,它将如下所示

代码语言:javascript
复制
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中必须有一种类似的连接方式,因为类型映射到一个模式,对吧?

我的模式..。

项目组架构

代码语言:javascript
复制
var ProjectGroupSchema = new Schema({
    title             : String
  , projects          : [ { type: Schema.Types.ObjectId, ref: 'Project' } ]
});

项目架构

代码语言:javascript
复制
var ProjectSchema = new Schema({
    title         : {type : String, default : '', required : true}
  , subscribers   : [{ type: Schema.Types.ObjectId, ref: 'User' }]
});

用户架构

代码语言:javascript
复制
var UserSchema = new Schema({
    first_name    : {type: String, required: true}
  , last_name     : {type: String, required: true}
});

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 05:05:06

您只差一步就到了!

项目组架构:

代码语言:javascript
复制
var ProjectGroupSchema = new Schema({
    title             : String
});

项目架构:

代码语言:javascript
复制
var ProjectSchema = new Schema({
    title         : {type : String, default : '', required : true},
    group         : {type: Schema.Types.ObjectId, ref: 'ProjectGroup' },
    _users    : [{type: Schema.Types.ObjectId, ref: 'User' }]
});

用户架构:

代码语言:javascript
复制
var UserSchema = new Schema({
    first_name    : {type: String, required: true},
    last_name     : {type: String, required: true},
    subscribing   : [{type: Schema.Types.ObjectId, ref: 'Project' }]
});

然后,您可以执行以下操作:

代码语言:javascript
复制
user.findById(req.userId)
     .populate('subscribing')
     .exec(function(err, user){
          console.log(user.subscribing);
     })

或者:

代码语言:javascript
复制
project.find({
        subscriber : req.userId
      })
     .populate('subscriber')
     .populate('group')
     .exec(function(err, projects){
          console.log(projects);
     })
票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14363065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档