我来自sql背景,所以在sql中编写查询,并在其中连接表非常简单,但我想我在mongoose/mongodb中缺少了这一点

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

我想拉项目组,以及用户所属的所有项目,所以如果我要用psedoo 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}
});

非常感谢.

推荐答案

你只差一步!

项目组架构:

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相关问答推荐

MongoDB:就地分组嵌套数组的元素

MongoDB/Mongoose查询:使用优先约束检索从位置A到位置B的路径

MongoDB 投影按数组中的字符串长度排序

根据条件删除一些数组元素并将数组的大小更新为mongo中的另一个文件

在 Mongo 聚合中,可以通过分组生成 3 个不同的计数

Mongoose - $project 嵌套的对象数组到数组的根级别

可变用户 Select

mongoDB 过滤、排序和排名结果

CouchDB 或 MongoDB 中的哪一个适合我的需求?

mongoose中的 required是什么意思?

实现 twitter 和 facebook 之类的主题标签

声明多个模式后无法从数据库中获取数据(mongoose + express + mongodb

mongoose如何在幕后工作

如何按季度分组日期?

Spring Mongo 条件查询两次相同的字段

MongoDB - 我如何找到另一个集合中的文档未引用的所有文档

指定在 mongodb .js 脚本中使用哪个数据库

MongoDB 按数组元素对文档进行排序

MongoDB 和 Robomongo: Can't connect (authentication)

MongoDB:删除唯一约束