Maison  >  Questions et réponses  >  le corps du texte

Prisma ORM n'a pas de méthode Json string_contains pour le chemin de base

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粉988025835P粉988025835394 Il y a quelques jours575

répondre à tous(1)je répondrai

  • P粉262113569

    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})
    `;

    répondre
    0
  • Annulerrépondre