gpt4 book ai didi

sequelize.js - 为什么 [Op.and] 在这种情况下使用 Sequelize 不起作用?

转载 作者:行者123 更新时间:2023-12-03 22:33:02 25 4
gpt4 key购买 nike

我有一个图像表,每个图像都有许多标签(注意 - 每个标签是标签表中的一个单独行,其中包含标签名称和置信度值 - 所以这意味着相同标签文本的许多不同行,例如“cat”可以存在,每个都有不同的置信度值。
我想查询包含 2 个或更多标签的所有图像。查找所有具有标签名称“cat”和“dog”的图像。
楷模

const Tag = sequelize.define("tag", {
name: {
type: Sequelize.TEXT('tiny')
},
value: {
type: Sequelize.STRING
},
});

const Frame = sequelize.define("frame", {
location: {
type: Sequelize.STRING,
allowNull: false
}
});
关系
db.projects.hasMany(db.frames, { onDelete: 'CASCADE', hooks: true })
db.frames.belongsTo(db.projects, {
foreignKey: "projectId",
as: "project"
});

db.frames.hasMany(db.tags, { onDelete: 'CASCADE', hooks: true });
db.tags.belongsTo(db.frames, {
foreignKey: "frameId",
as: "frame",
})
module.exports = db;

Controller
// form query (search?tags=cat;dog) into an array
var tagQuery = req.query.tag.split(";")

// form query
Frame.findAll({
include: {
model: Tag,
where: {
name: {
[Op.and]: tagQuery
}
},

}
})
.then(data => {
res.json(data)
})
预期的行为是只返回匹配“cat”和“dog”的帧。实际行为是不返回任何帧,即使记录同时包含“cat”和“dog”
改变
[Op.and]
[Op.any]
具有返回在查询中具有任何匹配项的所有帧的预期行为。
我的尝试
使用
[Op.overlap]
这导致以下错误:
error: SequelizeDatabaseError: operator does not exist: text && text[]
将标记名称类型更改为 STRING 没有任何区别。

最佳答案

为了检查某个帧是否具有所有指示的标签,您应该在主 where 选项中执行子查询,而不是在 where 选项中的 include 选项中:

where: sequelize.where(sequelize.literal(`
(SELECT count(*)
from tags
where tags.frameId=frame.id
and tags.name IN (<place all tags here in single quotes separated by comma>)
)`), '=', tagQuery.length)

关于sequelize.js - 为什么 [Op.and] 在这种情况下使用 Sequelize 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64984035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com