Strapi如何正确使用$and操作符编写多条件过滤查询
Strapi中使用$and实现多条件过滤的正确方法
原代码失效原因
你的代码存在两个语法错误,导致过滤逻辑完全不符合预期:
- 同一个JS对象中重复定义同名键
$and、重复定义同名键createdAt,后面的键值会直接覆盖前面的配置,最终实际生效的过滤条件只剩最后一个$and里的status_invitor和外层的status_invited,时间范围条件完全丢失 - Strapi要求
$and逻辑操作符接收数组类型的条件集合,而非对象类型,对象格式的写法不会被解析为多条件同时匹配的逻辑
正确写法
把所有需要同时满足的过滤条件,按顺序放进$and对应的数组中即可,每个条件单独作为数组的一项:
const query = qs.stringify({ filters: { $and: [ { createdAt: { $gte: firstDayOfTheMonth } }, { createdAt: { $lt: lastDayOfTheMonth } }, { status_invitor: statusFilter }, { status_invited: statusFilter } ] } });
简化写法
Strapi默认同级的过滤条件本身就是「同时满足(AND)」的逻辑,不需要显式调用$and就可以实现相同效果,代码更简洁:
const query = qs.stringify({ filters: { createdAt: { $gte: firstDayOfTheMonth, $lt: lastDayOfTheMonth }, status_invitor: statusFilter, status_invited: statusFilter } });
注:只有当你需要嵌套组合
$or/$and这类复杂逻辑时,才需要显式使用$and操作符,普通的多字段等值、范围过滤直接写在filters下即可。
内容的提问来源于stack exchange,提问作者Sayed Hassan Hussaini
相关产品推荐
相关产品推荐

