当前位置: 首页 > 面试题库 >

猫鼬/ mongoDB查询联接..但是我来自sql背景

薛博艺
2023-03-14
问题内容

我来自sql背景,因此在连接表的sql中编写查询非常简单,但我想我在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中进行类似的联接,因为类型正在映射到架构,对吗?

我的模式.....

项目组架构

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


 类似资料:
  • 问题内容: 是否可以查询特定日期? 我在mongo Cookbook中发现我们可以针对某个范围进行查询 ,例如: 但是可能有特定的日期吗?这不起作用: 问题答案: 如果您保存在数据库中的日期没有时间(恰好是年,月,日),那应该可行。 您保存的日期可能是,其中包括时间成分。要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围。

  • 问题内容: 我有两个包含“任务”和“注释”的表,并且想要检索一个任务列表,以及每个任务的关联注释数。这两个查询可以完成任务: 它们之间有区别吗?我应该在一个之上使用另一个,还是它们只是完成同一工作的两种方式?谢谢。 问题答案: 在小型数据集上,当涉及到性能时,它们会被淘汰。索引时,LOJ会好一些。 我发现在大型数据集上,内部联接(内部联接也将起作用。)将在很大的因素(抱歉,没有数字)方面优于子查询

  • 问题内容: 我正在尝试从C#查询SQL Server数据库 我有课 我的查询中有问题。 当我给普通查询“从表中选择*”时,这给了我完美的结果。 但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。 问题答案: 钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony Hopkinson的答案),请考虑使用参数化查询。 尝试在where子句

  • 问题内容: 我从Mongoose网站上阅读了快速入门,几乎复制了代码,但是无法使用Node.js连接MongoDB。 这是我的代码。控制台仅打印,不打印。我哪里错了? 问题答案: 调用时,它将建立与数据库的连接。 但是,您在以后的某个时间点(处理请求时)附加了事件侦听器,这意味着该连接可能已经处于活动状态,并且该事件已经被调用(您尚未监听它)。 。 您应该重新排列代码,以使事件处理程序尽可能(及时

  • 问题内容: 一般而言,我对Mongoose和MongoDB还是很陌生,所以我很难确定是否可以进行以下操作: 有更好的方法吗? 编辑 如有任何混淆,我们深表歉意。我想做的是获取所有包含有趣标签或政治标签的商品。 编辑 没有where子句的文档: 使用where子句,我得到一个空数组。 问题答案: 对于大于3.2的现代MongoDB,您可以在大多数情况下用作替代。这也有实际上做加盟,而不是什么“在服务

  • 问题内容: 我正在尝试使用Mongoose制作动态条件,但是它并没有像我想象的那样起作用。 代码是这样的 如您所见,我正在尝试使用“索引”变量创建动态条件。有可能这样做吗? 先感谢您! 问题答案: 您需要分两步创建对象: 更新资料 现在,node.js 4+支持计算的属性名称,您可以一步完成此操作: