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

Strapi嵌套数组$not类过滤失效,求正确过滤方案

Strapi嵌套数组排除指定值的过滤方案

问题背景

现有一组多语言内容数据,结构如下:

[
  {
    id: 1,
    locale: 'en',
    localizations: [
      { id: 2, locale: 'de' },
      { id: 3, locale: 'sv'}
    ]
  },
  {
    id: 2,
    locale: 'de',
    localizations: [
      { id: 1, locale: 'en' },
      { id: 3, locale: 'sv'}
    ]
  },
  {
    id: 3,
    locale: 'sv',
    localizations: [
      { id: 1, locale: 'en' },
      { id: 2, locale: 'de'}
    ]
  }
]

需要筛选出localizations数组中**完全不包含locale: 'en'**的记录,但使用$ne过滤时失效:

filter: {
  localizations: {
    locale: { $ne: 'en' }
  }
}

返回全部3条记录,原因是$ne只要匹配到数组中任意一个非'en'的元素,就会保留整条记录,无法实现“数组中无指定值”的过滤逻辑。

解决方法

方法1:使用$not + $elemMatch

通过$elemMatch匹配存在目标值的记录,再用$not取反,过滤出完全不包含目标值的记录:

filter: {
  localizations: {
    $not: {
      $elemMatch: {
        locale: 'en'
      }
    }
  }
}

此写法会排除所有localizations中存在locale: 'en'的主记录,最终仅返回id=1的条目。

方法2:使用$nin(兼容性更佳)

针对部分Strapi版本,也可以直接通过嵌套字段路径配合$nin实现需求:

filter: {
  'localizations.locale': {
    $nin: ['en']
  }
}

$nin会检查数组中是否不存在指定值,符合需求的记录才会被返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:54