Sequelize:查找没有关联的条目

2024-04-03

给出以下简单模型:

class A extends Model {}
A.init({
    aField: DataTypes.STRING,
}, { sequelize });

class B extends Model {}
B.init({
    bField: DataTypes.STRING,
}, { sequelize });

A.hasMany(B); // this creates the B.AId column


// populate

await A.create({
    aField: 'fooA',
    Bs: [{ bField: 'fooB' }]
}, { include: [B] });

await A.create({ aField: 'barA' });
await A.create({ aField: 'bazA' });

我不知道如何选择第一个没有 B 条目的 A 模型实例。
前一种情况,返回即可barA and bazA.

以下不起作用,它返回foo:

await A.findOne({
    include: [{
        model: B,
        required: false,
        where: {
            'AId': null,
        }
    }],
});

生成的查询是:SELECT A.*, Bs.id AS Bs.id, Bs.bField AS Bs.bField, Bs.AId AS Bs.AId FROM (SELECT A.id, A.aField FROM As AS A LIMIT 1) AS A LEFT OUTER JOIN Bs AS Bs ON A.id = Bs.AId AND Bs.AId IS NULL


这是一个极限和关联的问题。类似问题:https://github.com/sequelize/sequelize/issues/7585 https://github.com/sequelize/sequelize/issues/7585

Sequelize 将关联转变为子查询,但在您的用例中,您需要一个关联,然后限制总体关联结果。 为此,您可以使用subQuery: false禁用子查询。

await A.findOne({
    include: [{
        model: B,
        required: false,
        where: {
            'AId': null,
        }
    }],
    subQuery: false
});

这仍然无法实现你想要的,因为where in include将生成AND的条件ON.

生成的查询:

SELECT `A`.`id`, `A`.`aField`, `A`.`createdAt`, `A`.`updatedAt`, `Bs`.`id` AS `Bs.id`, 
    `Bs`.`bField` AS `Bs.bField`, `Bs`.`createdAt` AS `Bs.createdAt`, 
    `Bs`.`updatedAt` AS `Bs.updatedAt`, `Bs`.`AId` AS `Bs.AId` 
FROM `As` AS `A` 
LEFT OUTER JOIN `Bs` AS `Bs` ON `A`.`id` = `Bs`.`AId` AND `Bs`.`AId` IS NULL 
LIMIT 1;

你想要的是

...
... ON `A`.`id` = `Bs`.`AId` WHERE `Bs`.`AId` IS NULL 
LIMIT 1;

为了得到这个WHERE,你可以把where条款为A.

await A.findOne({
    include: [{
        model: B,
        required: false
    }],
    where: {
        '$Bs.AId$': null
    },
    subQuery: false
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sequelize:查找没有关联的条目 的相关文章

  • 在 PostgreSQL 中对 JsonB 数组进行 Sequelize ORM 查询

    如何使用一些匹配条件和逻辑运算 lt et gte等 在 Jsonb 对象数组上 在 PostgreSQL 中使用 Sequelize ORM 表名 calls id direction metaData 1 inbound 2 outbo
  • 加载sequelize中关系为空的项目

    我是续集的新手 我正在尝试加载用户表中任务关系为空的所有条目 但它不起作用 这是我尝试过的 const express require express const app express const Sequelize require se
  • 将原始 SQL 查询与 Sequelize ORM 和文字结合使用

    使用 Sequelize ORM 我尝试更新字段 level id 其中该字段具有指向另一个名为 level tbl 的表中的字段 Level 的外键 select from level tbl level id Level 1 Highe
  • 在 Sequelize 中按日期范围查询列字段

    我正在尝试使用 Sequelize 查询数据库以获取在特定日期范围内创建的项目 我用的是 between运营商 但我似乎没有得到任何东西 where createdAt between 2018 03 31T21 00 00 000Z 20
  • Sequelize - where 子句中的列上的函数

    我有一个餐厅模型 其属性 位置 类型为 GEOMETRY Point 我正在尝试使用sequelize编写一个查询 该查询将为我提供特定半径内的所有餐厅 models Restaurant findAll attributes models
  • Node.js 续集关联,包含条件

    是否可以在 findAll 查询的包含数组中传递条件 例如 我有 UsersModel PostsModel 和 UserVotesModel 用户可以对帖子进行投票 对于登录用户 我想查询帖子并仅包含当前用户的投票 我无法使用 Seque
  • Sequelize 设置时区进行查询

    我目前正在使用续集 with postgres在我的项目中 我需要更改查询 因此它返回带有时区偏移量的created at列 var sequelize new Sequelize connStr dialectOptions useUTC
  • 连接远程mysql数据库时Sequelize Connect ETIMEDOUT

    我收到错误SequelizeConnectionError connect ETIMEDOUT当尝试使用sequelize连接到远程mysql数据库时 当我尝试连接到本地 mysql 数据库时 可以成功建立连接 我正在使用sequelize
  • 折旧警告不允许在 AZURE 上部署应用程序,

    将应用程序部署到 AZURE 时 我收到以下警告 节点 6568 DEP0064 DeprecationWarning tls createSecurePair 是 已弃用 请改用 tls Socket 但这不允许我的应用程序启动 Azur
  • Sequelize 同步与迁移

    我正在学习 Sequelize 我想了解一些有关同步与迁移的说明 我知道同步将根据我的模型架构创建丢失的表 但我还读到同步用于初始化数据库 而迁移用于生产 如果是这种情况 express example 显示调用同步来自bin www ht
  • 续集上的belongsToMany会自动创建新的连接表吗?

    我对这个续集很陌生 我尝试使用belongsToMany通过UserPermissions在用户和权限之间关联模型 这是我的代码 用户 js const bcrypt require bcrypt const config require
  • 如何使用sequelize 与postgres 进行日期比较

    我想删除日期在 20 分钟之前的所有记录 Postgres 或 Sequelize 对裸露的 javascript 不满意Date我提供的对象作为比较值 我在 postgres 9 6 数据库之上使用sequelize 4 37 有问题的列
  • 如何将对象作为数据类型传递给sequelize中的数据模型?

    我需要将一些不是原始数据类型的东西传递给数据类型 我正在构建类似的东西以发送到 create 方法 const p2 location model latitude lat longitude lng establishment id cr
  • 在sequelize.js 上查询“paranoid”表时如何包含已删除的元素?

    我希望我的应用程序上以前存在的用户已使用偏执模式删除 所以现在它的字段deletedAt is NOT null 以便能够使用同一电子邮件再次注册 因此 当 API 注意到使用以前使用过的电子邮件创建用户时 它会设置为null the de
  • 如何忽略Sequelize中的SequelizeUniqueConstraintError?

    使用来自的示例文档 http docs sequelizejs com manual tutorial associations html creating elements of a hasmany or belongstomany as
  • Sequelize 创建具有关联的对象

    我正在尝试保存续集模型及其关联 所有关联都是一对一的 从数据库中检索具有关联的模型效果很好 但插入它们是另一回事 而且文档只会让我更加困惑 这是我的插入方法 models radcheck create user include model
  • 通过另一个表对 hasMany 进行 Sequelize

    好的 我有以下三个models Module var Module sequelize define module id DataTypes INTEGER name DataTypes STRING description DataTyp
  • 使用 Sequelize 计算关联条目数

    我有两张桌子 locations and sensors 每个条目在sensors有一个外键指向locations 使用 Sequelize 如何获取所有条目locations以及条目总数sensors与每个条目相关联locations R
  • 使用sequelize 根据express.js 中的路由更改数据库连接

    是否可以更改数据库连接sequelize取决于路线 例如 用户可以访问网站中的 2 个不同安装 example com foo example com bar 登录后用户将被重定向到example com foo为了获得他们的所有任务foo
  • 如何用 Jest 模拟 Sequelize?

    我正在尝试为调用 Sequelize 来创建数据库的代码编写单元测试 我一生都无法弄清楚如何模拟对 Sequelize 的调用 以便我可以断言他们已经正确创建了数据库表 我点击 Sequelize 的代码如下 import Sequeliz

随机推荐