我正在尝试对一个json类型的字段进行包含字符串的过滤,因为我想搜索所有的json内容
this._prismaService.service.findMany({ ...args, where: { OR: [ { nameTranslatableJson: { string_contains: filters.search, }, }, ], }, });
但是这个过滤器对我来说不起作用,我不能指定一个路径,因为它必须从根目录进行过滤
json的结构是这样的
{ "defaultText": "Prueba???", "ES": "What???", "EN": "What???" }
如何从根目录过滤任何json内容或者有一个替代方法来进行过滤
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}) `;