如何在 Node.js 上使用 Sequelize 进行连接查询

2023-11-23

我正在使用sequelize ORM;一切都很棒而且干净,但是当我使用它时遇到了问题join查询。 我有两个模型:用户和帖子。

var User = db.seq.define('User',{
    username: { type: db.Sequelize.STRING},
    email: { type: db.Sequelize.STRING},
    password: { type: db.Sequelize.STRING},
    sex : { type: db.Sequelize.INTEGER},
    day_birth: { type: db.Sequelize.INTEGER},
    month_birth: { type: db.Sequelize.INTEGER},
    year_birth: { type: db.Sequelize.INTEGER}

});

User.sync().success(function(){
    console.log("table created")
}).error(function(error){
    console.log(err);
})


var Post = db.seq.define("Post",{
    body: { type: db.Sequelize.TEXT },
    user_id: { type: db.Sequelize.INTEGER},
    likes: { type: db.Sequelize.INTEGER, defaultValue: 0 },

});

Post.sync().success(function(){
    console.log("table created")
}).error(function(error){
    console.log(err);
})

我想要一个查询,该查询以包含发布该帖子的用户信息的帖子进行响应。在原始查询中,我得到:

db.seq.query('SELECT * FROM posts, users WHERE posts.user_id = users.id ').success(function(rows){
            res.json(rows);
        });

我的问题是如何更改代码以使用 ORM 样式而不是 SQL 查询?


虽然接受的答案在技术上没有错误,但它没有回答原始问题,也没有回答评论中的后续问题,而这正是我来这里寻找的。但我想通了,所以就这样吧。

如果您想查找所有具有用户的帖子(并且仅查找具有用户的帖子),则 SQL 将如下所示:

SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id

这在语义上与 OP 的原始 SQL 相同:

SELECT * FROM posts, users WHERE posts.user_id = users.id

那么这就是你想要的:

Posts.findAll({
  include: [{
    model: User,
    required: true
   }]
}).then(posts => {
  /* ... */
});

将 required 设置为 true 是生成内连接的关键。如果您想要左外连接(您可以在其中获取所有帖子,无论是否有链接的用户),则将 required 更改为 false,或者将其保留,因为这是默认值:

Posts.findAll({
  include: [{
    model: User,
//  required: false
   }]
}).then(posts => {
  /* ... */
});

如果您想查找出生年份为 1984 年的用户的所有帖子,您需要:

Posts.findAll({
  include: [{
    model: User,
    where: {year_birth: 1984}
   }]
}).then(posts => {
  /* ... */
});

请注意,只要添加 where 子句,默认情况下 required 就是 true。

如果您想要所有帖子,无论是否有附加用户,但如果有用户,则只包含 1984 年出生的帖子,然后将必填字段添加回:

Posts.findAll({
  include: [{
    model: User,
    where: {year_birth: 1984}
    required: false,
   }]
}).then(posts => {
  /* ... */
});

如果您想要名称为“Sunshine”的所有帖子,并且仅当它属于 1984 年出生的用户时,您可以这样做:

Posts.findAll({
  where: {name: "Sunshine"},
  include: [{
    model: User,
    where: {year_birth: 1984}
   }]
}).then(posts => {
  /* ... */
});

如果您想要名称为“Sunshine”的所有帖子,并且仅当它属于与帖子上的 post_year 属性匹配的同一年出生的用户时,您可以这样做:

Posts.findAll({
  where: {name: "Sunshine"},
  include: [{
    model: User,
    where: ["year_birth = post_year"]
   }]
}).then(posts => {
  /* ... */
});

我知道,某人在他们出生的那一年发表帖子是没有意义的,但这只是一个例子 - 就这样吧。 :)

我(大部分)从这个文档中发现了这一点:

  • http://docs.sequelizejs.com/en/latest/docs/models-usage/#eager-loading
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Node.js 上使用 Sequelize 进行连接查询 的相关文章

  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013
  • 使用cheerio 检索href

    我有一个下载的 html 文件 看起来像这样 div div div div style height 11px color white font size 9px font weight bold div div style border
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • MySQL - 从数字列表中选择在表的 id 字段中没有对应项的数字

    我有一个数字列表 例如 2 4 5 6 7 我有一个表 foos 带有 foos ID 包括 1 2 3 4 8 9 我想获取我的号码列表 并在我的表的 ID 字段中找到那些没有对应项的号码 实现此目的的一种方法是创建一个表格栏 在 ID
  • Firebase 模拟器启动时失败找不到模块 --dns-result-order=ipv4first

    Firebase 模拟器11 0 0无法启动 firebase emulators start 当它到达模拟器 UI 时抛出异常 i ui 模拟器 UI 日志记录到 ui debug log ui 发生致命错误 模拟器 UI 已退出 代码为
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • MySql 视图脚本中的注释

    可以这样做吗 我尝试过多个 gui mysql workbench navicat toad for mysql 但没有一个保存这样的注释 something important select something else importan
  • firebase 和 firebase-admin npm 模块有什么区别?

    我想使用 Firebase 身份验证 数据库和存储 构建 Node js Web 应用程序 但我对应该使用哪个模块感到困惑 firebase or firebase 管理员 或两者 管理 SDK 运行您的代码管理权限 https fireb
  • Cosmos DB Mongo API 如何管理“请求率很大”情况

    我有以下代码 async function bulkInsert db collectionName documents try const cosmosResults await db collection collectionName
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • NodeJS hmac 摘要问题与重音

    我正在对以下代码与 Ruby PHP 和 NodeJS 进行并排比较 使用 NodeJS 得到错误的响应crypto module PHP hash hmac sha256 text Ruby OpenSSL HMAC hexdigest
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • 如何恢复之前显示的Fragment?

    我在我的项目中使用兼容性包 v4 但在保留Fragment从视图中删除后周围 我有我的Activity显示 2 个片段 左侧是菜单框架 右侧是内容窗格 菜单框架有 3 个可以显示的不同菜单 片段 这就是我替换菜单片段的方式 public v
  • R Shiny:如何将数据表添加到动态创建的选项卡

    我目前正在尝试创建动态创建的数据表 每个数据表都有自己的选项卡 选项卡的数量由用户确定 我已经使用了来自的代码这个帖子作为一个框架 我能够动态创建选项卡 但我不知道如何将数据表添加到选项卡 数据表也由用户输入确定 因此 例如 在 ui R
  • 具有验证功能的独特 CD-KEY 生成算法

    我正在尝试创建一个独特的 CD KEY 放入我们产品的包装盒中 就像用户用来注册产品的标准软件盒中的普通 CD KEY 一样 然而 我们不销售软件 我们销售的是用于犯罪和医疗目的的 DNA 采集套件 用户将通过邮件收到带有 CD KEY 的
  • Angular.js 中哪些“东西”可以注入到其他东西中?

    我很难理解 Angular 中的依赖注入 所以我的问题是 谁能解释一下我们可以将哪些 类型 如控制器 工厂 提供者等 注入到其他类型中 包括相同 类型 的其他实例 我真正要找的是这张表 上面写满了 y n 对于具有相同行 列的单元格 这意味
  • 与组件相比,使用服务有哪些优点和缺点?

    在过去的几个月里 我一直致力于最新的 net 框架中的项目 我觉得在最新的 net 版本中 鼓励 服务 而不是组件 那是对的吗 我在silver light中看到过 我是silver light的初学者 所有的DB层操作都暴露为服务 不知道
  • 如何在Spring的CAS服务属性中正确设置服务URL

    当使用 Spring Security CAS 时 我总是遇到发送到 CAS 的回调 URL 即服务属性 的小障碍 我看过很多例子 例如this and this但它们都使用硬编码的 URL 甚至Spring 的 CAS 文档 典型的剪辑看
  • 我如何创建一个每次在 tkinter 中显示帧时运行的方法

    我有一个 GUI 应用程序 有几个窗口和按钮可以前进和后退 为此 我使用控制器并在每次窗口更改时将框架提升到顶部 这是我的控制器代码和典型框架 import Tkinter as tk python from tkFileDialog im
  • Django OperationalError:无法为连接创建新进程

    今天早上 在让 Django storages Boto 和 Django compressor 将静态文件放到 S3 上之后 我今天早上开始在生产环境中遇到此错误 尽管我不知道这是否相关 OperationalError could no
  • 如何持久存储目录中文件的值?

    我正在使用 C 在 VS2005 中开发 Windows 应用程序 在我的项目中 我生成 dll 并将它们存储在一个目录中 这些 dll 将被命名为 TestAssembly1 TestAssembly2 TestAssembly3 等 所
  • Node.js 连接 ftp 并下载文件

    你好 我下载了这个 npm 模块来连接到我的 ftp 节点FTPS 连接等级 var FTPS require ftps var ftps new FTPS host myhost username user password mypw p
  • Interlocked.CompareExchange 是否使用内存屏障?

    我正在阅读乔 达菲 Joe Duffy 的帖子读写易失性和时效性 我试图理解帖子中最后一个代码示例的一些内容 while Interlocked CompareExchange ref m state 1 0 0 m state 0 whi
  • 使用位置粘性删除不需要的空间

    我正在尝试使用position sticky在旋转的元素上 但我在顶部获得了额外的空间 此外 粘性元素必须停止的地方 在父元素的末尾 它会移到外面 请注意 我需要控制来选择粘性元素和左窗口侧之间放置的像素数 检查第二个屏幕截图以了解这两个问
  • Google 自定义搜索下一页

    我有以下代码 但我不知道如何打印下一页的链接 如何转到下一页 usr bin python2 4 coding utf 8 import pprint from apiclient discovery import build def ma
  • 如何将 BlueZ 配置为要求连接设备输入匹配的密钥?

    我正在尝试在嵌入式 Linux 设备上设置蓝牙 以便使用 SSP 模式 我的设备生成密码并在其显示屏上显示密码 并且要求远程端 例如用户的手机 输入匹配的密码才能使用才能成功配对 我编写 注册了一个代理 将其模式设置为 DisplayOnl
  • 为什么数组的 VarType() 总是返回 8204

    In the VarType MSDNMicrosoft VBScript 文档VarType它说的功能 粗体强调 备注 VarType 函数永远不会通过以下方式返回 Array 的值 本身 它总是添加到其他一些值来指示数组 特定类型 Va
  • 增量逻辑

    我试图更深入地了解后增量和预增量 但我有点坚持以下表达式 public static void main String args int i 0 i i i i 2 i i i 0 i i 2 i i i 0 1 3 2 1 i 0 6 1
  • 如何根据实时音频开发频谱分析仪?

    我正在开发一个应用程序 可以实时从麦克风获取源音频 无需文件存储 基本上 我使用 mRecorder new MediaRecorder mRecorder setAudioSource MediaRecorder AudioSource
  • 带有 SceneKit SCNProgram 的金属着色器

    我正在寻找一个可以在 SceneKit 和 SCNProgram 中工作的金属着色器 有人可以告诉我正确的方法声明 如何连接它吗 let program SCNProgram program vertexFunctionName myVer
  • 在 Android 上阻止网站

    有没有办法在 Android 设备上以编程方式阻止网站 我想要一个填充到持续运行的服务中的 URL 黑名单 当在受限条款下运行的用户打开浏览器时 它应该检查该黑名单 我想过修改hosts allow和hosts deny文件 但这些文件受到
  • 如何在 Node.js 上使用 Sequelize 进行连接查询

    我正在使用sequelize ORM 一切都很棒而且干净 但是当我使用它时遇到了问题join查询 我有两个模型 用户和帖子 var User db seq define User username type db Sequelize STR