gpt4 book ai didi

mysql - 如何使用 nodeJS 在 Sequelize 中包含的对象数组中执行查询

转载 作者:行者123 更新时间:2023-12-03 22:34:55 28 4
gpt4 key购买 nike

我有2张 table 。

  • Users 表,存储我的用户信息。
  • Expertises 表,存储专业领域。
    (例如:`Construction'、'Programming' 等)

  • 每个用户都有一个唯一的 ID,每个专业知识也有一个唯一的 ID。

    我表中的每个用户都可能拥有多项“专长”。
    有一个多对多表连接用户和他们的专业知识,称为 UsersExpertises

    UsersExpertises 表中,我存储 userIdexpertiseId ,当我想获取特定用户的所有专业知识时,我可以简单地通过他的 id 查询并获取他的专业知识。我为此使用了 Sequelize include

    到目前为止,我刚刚解释的一切都很棒。我的问题:

    我需要向我的应用程序添加搜索功能,以便我们的用户可以搜索其他用户,我的搜索算法正在用户表中的几列中进行搜索,并且搜索参数之一应包括他们的专业知识。所以,如果有人输入“编程”是专业知识的名称,我需要返回具有该专业知识的所有用户的列表。

    所以,我到目前为止的 where 查询:
    const where = {
    [Op.and]: [
    // Only search for active user profiles.
    { isActive: true },
    // Make sure we filter our searching user from the results
    { id: { [Op.ne]: userId } }
    ],
    [Op.or]: [

    // Search user by their first and last names
    { firstName: { [Op.substring]: keyword } },
    { lastName: { [Op.substring]: keyword } },
    Sequelize.where(Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
    [Op.substring]: keyword
    }),

    // Search business name and description.
    { businessName: { [Op.substring]: keyword } },
    { businessDescription: { [Op.substring]: keyword } },

    // Search in expertises and cities.
    // { '$expertises.name$': { [Op.substring]: keyword } }, // TODO - This doesn't work.
    { '$city.name$': { [Op.substring]: keyword } }
    ]
    };

    这是最终输出(如果重要的话):
    {
    "id": 35,
    "firstName": "David",
    "lastName": "Hasslehoff",
    "city": {
    "id": 4,
    "name": "Los Angeles"
    },
    "expertises": [
    {
    "id": 1,
    "name": "Construction"
    },
    {
    "id": 2,
    "name": "Programming"
    }
    ]
    }

    看看这一行: { '$city.name$': { [Op.substring]: keyword } } City 是我在此查询的 User 表中包含的对象,这非常有效,因为 City 是一个可以附加到只有一个城市的用户的对象,但是 User 可能有多个 Expertise ,因此包含的 Expertise 是一个 Expertise 对象数组。

    如何在包含的数组中搜索“专业知识”的“名称”?这能做到吗?

    我希望我已经包含了所有需要的信息,以便大家理解我的问题,如果有什么遗漏,请告诉我,我会为您提供任何需要的信息。

    非常感谢!

    最佳答案

    在评论中收到@Anatoly 对 Sequelize.literal 的输入后,我已经设法解决我的问题。

    谢谢阿纳托利。

    如果其他人将来有类似的问题,我将附上我的代码:

                {
    [Op.or]: Sequelize.literal(`EXISTS(
    SELECT EF.id, EF.name FROM UsersExpertises AS UE
    JOIN ExpertiseFields AS EF
    ON EF.id = UE.expertiseId
    WHERE UE.userId = User.id
    AND EF.name LIKE '%${keyword}%')`)
    }

    关于mysql - 如何使用 nodeJS 在 Sequelize 中包含的对象数组中执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005422/

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