搜尋

首頁  >  問答  >  主體

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粉988025835438 天前627

全部回覆(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
  • 取消回覆