Supabase使用GTE过滤大量数据

supabase filter large numbers with gte

提问人:Emiliano 提问时间:11/16/2023 更新时间:11/18/2023 访问量:20

问:

你好吗?我使用 nextjs pages router 和 supabase 创建一个商店。使用过滤器获取我的产品时,我发现了一个错误。gte 过滤器不适用于超过 4 位数字的数字。(例如:11000)

我的 api 路由是这样的:

async function handler(req: NextApiRequest, res: NextApiResponse) {
  if (req.method !== "POST") {
    // Return an error response for unsupported request methods
    res.status(405).json({ error: "Method Not Allowed" });
    return;
  }


  const {
    minPrice,
    maxPrice,
    oferta,
    garment,
    category,
    search,
  }: {
    minPrice: number | undefined | null;
    maxPrice: number | undefined | null;
    oferta: string | undefined | null;
    garment: string | undefined | null;
    category: string | undefined | null;
    search: string | undefined | null;
  } = req.body;

  let query = supabase
    .from("products")
    .select(
      "seller!inner( status ), id, published, published_version, created_at"
    )
    .eq("suspended", "false")
    .eq("published", "true")
    .eq("seller.status", "live");

  if (oferta === "si") {
    query = query.neq("published_version->>offer_price", "");
  }

  if (oferta === "no") {
    query = query.eq("published_version->>offer_price", "");
  }

  if (category) {
    query = query.eq("published_version->category->>main", category);
  }

  if (garment) {
    query = query.eq("published_version->category->>garment", garment);
  }

  if (minPrice) {
    console.log("minPrice", minPrice);
    query = query.gte("published_version->>price", minPrice);
  }

  // we fetch the products with the filters applied and order them

  query = query.order("created_at", { ascending: false }).limit(50);

  const { data, error } = await query;

  if (error || !data) {
    console.log("ERROR", error);
    res.status(500).json({ error: error.message });
  }

  const products = data?.map((product) => {
    return {
      ...product,
      data: {
        ...product.published_version,
      },
    };
  });

  res.status(200).json({ data: products });
}

除了 minPrice 和 maxPrice 过滤器外,一切正常。我无法使用大于 9999 的数字进行筛选。

有人可以帮我吗?谢谢!

javascript 下一个.js supabase

评论

0赞 dshukertjr 11/17/2023
当您使用超过 4 位数字的 gte 进行筛选时,究竟会发生什么?

答:

1赞 Emiliano 11/18/2023 #1

我已经解决了。显然,我用错了.对于 jsonb 第一个孩子,我应该使用->>->