Maison > Questions et réponses > le corps du texte
J'essaie de filtrer un champ de type json qui contient des chaînes car je souhaite rechercher tout le contenu json
this._prismaService.service.findMany({ ...args, where: { OR: [ { nameTranslatableJson: { string_contains: filters.search, }, }, ], }, });
Mais ce filtre ne fonctionne pas pour moi, je ne peux pas spécifier de chemin car il doit filtrer depuis la racine
La structure de json est comme ça
{ "defaultText": "Prueba???", "ES": "What???", "EN": "What???" }
Comment filtrer tout contenu json du répertoire racine ou existe-t-il un autre moyen de filtrer
P粉2621135692023-09-22 00:52:31
Si vous souhaitez effectuer une recherche de texte sur toutes les valeurs d'un champ JSON, vous devez généralement utiliser une fonction ou un opérateur spécifique à la base de données. Pour PostgreSQL, vous pouvez utiliser jsonb_to_tsvector
函数将JSONB数据转换为tsvector
puis utiliser la fonctionnalité de recherche en texte intégral de PostgreSQL.
Voici un exemple d'utilisation d'une requête SQL brute avec la fonction prisma.$queryRaw
函数编写使用jsonb_to_tsvector
:
const searchResults = await this._prismaService.$queryRaw` SELECT * FROM "Service" WHERE to_tsvector('english', "nameTranslatableJson"::text) @@ plainto_tsquery('english', ${filters.search}) `;