You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用qs在Strapi中实现动态筛选(数组$in筛选报错)

解决Strapi结合qs使用$in数组筛选的问题

1. 修正类型定义

你当前类型里的[string]是单元素元组,而复选框多选会生成多元素数组,这会导致类型不匹配,需改成string[]:

export interface responseFilterType {
    type_product?: string[]
    user_type?: string[]
    weight?: string | number
}

2. 调整qs序列化配置

Strapi的REST API要求数组参数以[$in][]格式传递,需给qs添加arrayFormat: 'brackets'配置,确保数组被正确序列化:

qs.stringify({
    populate: "*",
    filters: {
        ...(value.type_product && {
            type_product: {
                $in: value.type_product,
            }
        }),
        ...(value.user_type && {
            user_type: {
                $in: value.user_type,
            }
        }),
        ...(value.weight && {
            weight: value.weight // 若需范围筛选可添加$gte/$lte等运算符
        })
    },
}, {
    encodeValuesOnly: true,
    arrayFormat: 'brackets' // 关键配置,保证数组序列化为Strapi可识别的格式
});

注:无需手动嵌套$and数组,Strapi默认会将filters内的多个条件视为逻辑与关系。

3. 适配关联字段场景

如果type_product/user_type是关联字段(比如关联其他集合),需要针对关联对象的主键筛选:

type_product: {
    id: {
        $in: value.type_product // 传入关联对象的ID数组
    }
}

4. 验证Strapi端配置

  • 确保type_product和user_type字段在Strapi后台开启了可筛选选项(内容类型的字段设置中配置)
  • 若为枚举字段,确认传入的数组值与枚举选项完全匹配(大小写、拼写一致)

内容的提问来源于stack exchange,提问作者Frallen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:53:24