Heim > Fragen und Antworten > Hauptteil
Ich versuche, ein Feld vom Typ JSON zu filtern, das Zeichenfolgen enthält, weil ich den gesamten JSON-Inhalt durchsuchen möchte
this._prismaService.service.findMany({ ...args, where: { OR: [ { nameTranslatableJson: { string_contains: filters.search, }, }, ], }, });
Aber dieser Filter funktioniert bei mir nicht, ich kann keinen Pfad angeben, da vom Stamm aus gefiltert werden muss
Die Struktur von JSON ist wie folgt
{ "defaultText": "Prueba???", "ES": "What???", "EN": "What???" }
So filtern Sie JSON-Inhalte aus dem Stammverzeichnis oder gibt es eine alternative Möglichkeit zum Filtern
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}) `;