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

如何在MongoDB聚合中过滤数组并生成不含指定元素的新字段

MongoDB聚合$filter筛选数组非指定值的问题解决

你的问题出在三个关键点上:条件运算符使用错误、聚合变量引用错误,以及未保留原数组字段。

问题分析

  • 原代码用$eq作为$filter的条件,这会保留等于"reading"的元素,而你需要的是排除该值,因此要替换为$ne(不等于)运算符。
  • 聚合中通过as定义的临时变量,必须用双美元符号$$引用,原代码里的"$hobby"是错误写法,正确应为"$$hobby"。
  • 原$project阶段未保留原hobbies字段,导致输出缺失该内容,需添加hobbies: 1来保留。

修正后的代码

db.users.aggregate([
  {
    $match: {
      hobbies: "reading"
    }
  },
  {
    $project: {
      name: 1,
      age: 1,
      hobbies: 1,
      FilteredItems: {
        $filter: {
          input: "$hobbies",
          as: "hobby",
          cond: { $ne: ["$$hobby", "reading"] }
        }
      }
    }
  }
]);

执行结果

运行上述代码后,会得到你预期的输出:

[
{
  "_id": 1,
  "name": "Alice",
  "age": 30,
  "hobbies": ["reading","traveling"],
  "FilteredItems": ["traveling"]
},
{
  "name": "James",
  "age": 30,
  "hobbies": ["reading", "painting"],
  "FilteredItems": ["painting"]
}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:17