postgresql 如何检查数组中是否有查询中的一个对象,并在Supplies中抛出其中的所有对象

carvr3hs  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(141)

也许题目不是最好的,但我不知道如何用一句话来解释得更好。
因此,要获得上下文,最好的方法是查看我在JavaScript中为Supplier执行的查询及其响应。

数据:

[
  {
    title: 'El Hobbit',
    slug: 'el-hobbit-libro-g3kCYxiIII',
    categories: { slug: 'libro', title: 'Libro' },
    tags: [
      { slug: 'epico', title: 'Épico' },
      { slug: 'fantasia', title: 'Fantasía' }
    ]
  },
  {
    title: 'Orgullo y Prejuicio (2005)',
    slug: 'orgullo-y-prejuicio-pelicula-2005-lQoqYD5QuV',
    categories: { slug: 'pelicula', title: 'Película' },
    tags: [ 
      { slug: 'romance', title: 'Romance' },
      { slug: 'romance-historico', title: 'Romance histórico' },      
      { slug: 'drama', title: 'Drama' } 
    ]
  }
]

字符串

函数中的查询:

async function getReviews() {
  try {
    
    let query = supabase
      .from('reviews')
      .select(
        `
        title,
        slug,
        categories ( title, slug ),
        tags ( title, slug )
      `
      )
      .eq('published', true)

    const { data: reviews } = await query
    return reviews
  } catch (error) {
    console.error('Error fetching reviews:', error)
  }
}


所以我想做的是只显示tags对象中的slug的记录,例如,“romance”。该记录也应该显示它的所有标签。
我试过什么
我试着做了一个过滤器

async function getReviews() {
  try {
    // fetch reviews from supabase
    let query = supabase
      .from('reviews')
      .select(
        `
        title,
        slug,
        categories ( title, slug ),
        tags ( title, slug )
      `
      )
      .eq('published', true)
      .in('tags.slug', ['romance'])

    const { data: reviews } = await query
    return reviews
  } catch (error) {
    console.error('Error fetching reviews:', error)
  }
}


输出(注意标签):

[
  {
    title: 'El Hobbit',
    slug: 'el-hobbit-libro-g3kCYxiIII',
    tags: [],
    categories: { slug: 'libro', title: 'Libro' }
  },
  {
    title: 'Orgullo y Prejuicio (2005)',
    slug: 'orgullo-y-prejuicio-pelicula-2005-lQoqYD5QuV',
    tags: [{ slug: 'romance', title: 'Romance' }],
    categories: { slug: 'pelicula', title: 'Película' }
  }
]


但我期待的是

[
  {
    title: 'Orgullo y Prejuicio (2005)',
    slug: 'orgullo-y-prejuicio-pelicula-2005-lQoqYD5QuV',
    categories: { slug: 'pelicula', title: 'Película' },
    tags: [ 
      { slug: 'romance', title: 'Romance' },
      { slug: 'romance-historico', title: 'Romance histórico' },      
      { slug: 'drama', title: 'Drama' } 
    ]
  }
]


我知道这可能是一个愚蠢的问题,但我是一个新的与postgres和supplies。希望你们能给予我一只手。非常感谢提前!

jexiocij

jexiocij1#

我想这段代码可以帮助你得到所有的数据,它的标签数组包含“浪漫”。

const { data, error } = await supabase
  .from('reviews')
  .select('*')
  .cs('tags:slug', ['romance']);

if (error) {
  console.error('Error fetching data:', error.message);
} else {
  console.log('Filtered data:', data);
}

字符串
使用cs方法,您可以检查tags:slug是否包含“浪漫”存在。如果这不起作用,或者即使您得到了更接近您想要的结果,我也会感谢帮助。

相关问题