首页  >  问答  >  正文

Prisma ORM没有基本路径的Json string_contains方法

我正在尝试对一个json类型的字段进行包含字符串的过滤,因为我想搜索所有的json内容

this._prismaService.service.findMany({
          ...args,
          where: {
            OR: [
              {
                nameTranslatableJson: {
                  string_contains: filters.search,
                },
              },
            ],
          },
});

但是这个过滤器对我来说不起作用,我不能指定一个路径,因为它必须从根目录进行过滤

json的结构是这样的

{
  "defaultText": "Prueba???",
  "ES": "What???",
  "EN": "What???"
}

如何从根目录过滤任何json内容或者有一个替代方法来进行过滤

P粉988025835P粉988025835394 天前579

全部回复(1)我来回复

  • P粉262113569

    P粉2621135692023-09-22 00:52:31

    如果您想在JSON字段的所有值上执行文本搜索,通常需要使用特定于数据库的函数或运算符。对于PostgreSQL,您可以使用jsonb_to_tsvector函数将JSONB数据转换为tsvector,然后使用PostgreSQL的全文搜索功能。

    以下是如何使用prisma.$queryRaw函数编写使用jsonb_to_tsvector函数的原始SQL查询的示例:

    const searchResults = await this._prismaService.$queryRaw`
      SELECT *
      FROM "Service"
      WHERE to_tsvector('english', "nameTranslatableJson"::text) @@ plainto_tsquery('english', ${filters.search})
    `;

    回复
    0
  • 取消回复