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

如何在MongoDB Compass及find方法中查询嵌套数组内level=-1的对象?

没问题!完全可以在MongoDB Compass里实现这个需求,我会一步步给你讲操作方法,同时也提供对应的Mongo Shell查询语句,分两种常见场景说明:

在MongoDB Compass中查询的方法

首先打开Compass,连接到你的数据库,找到ProbCancer集合,然后根据你的需求选择下面的操作:

场景1:找出所有包含level=-1的cases元素的文档

这个场景下,我们只筛选出cases数组里至少有一个元素满足level=-1的文档,返回的文档会保留完整的cases数组:

  1. 点击顶部的Filter输入框
  2. 输入以下查询条件:
{ "cases.level": -1 }
  1. 点击右侧的Find按钮,就能看到符合条件的文档了。

场景2:返回文档时仅保留cases数组中level=-1的元素

如果想让返回的文档里,cases数组只留下level=-1的对象(过滤掉其他level的元素),有两种方式:

方式1:仅返回第一个匹配的元素(用Projection)

这种方式会保留cases数组中第一个level=-1的元素,其他元素会被剔除:

  1. 在Filter框里输入场景1的筛选条件:{ "cases.level": -1 }
  2. 切换到顶部的Project选项卡
  3. 输入投影条件:
{ "cases": { "$elemMatch": { "level": -1 } } }
  1. 点击Find,就能看到处理后的结果。

方式2:返回所有匹配的元素(用聚合管道)

如果cases数组里有多个level=-1的元素,上面的方式只会返回第一个,这时候用聚合管道可以保留所有匹配的元素:

  1. 切换到顶部的Aggregation选项卡
  2. 添加第一个阶段(Stage):选择$match,输入:
{ "$match": { "cases.level": -1 } }
  1. 添加第二个阶段:选择$project,输入:
{
  "$project": {
    "cases": {
      "$filter": {
        "input": "$cases",
        "as": "case",
        "cond": { "$eq": ["$$case.level", -1] }
      }
    },
    "_id": 1 // 这里可以添加你需要保留的其他字段,比如其他文档字段写"字段名": 1即可
  }
}
  1. 点击Run,就能得到所有cases数组仅包含level=-1元素的文档。
对应的Mongo Shell查询语句

场景1:筛选包含level=-1的cases元素的文档

db.ProbCancer.find({ "cases.level": -1 });

场景2:仅返回cases数组中第一个匹配的元素

db.ProbCancer.find(
  { "cases.level": -1 },
  { "cases": { "$elemMatch": { "level": -1 } } }
);

场景3:返回cases数组中所有匹配的元素

db.ProbCancer.aggregate([
  { "$match": { "cases.level": -1 } },
  {
    "$project": {
      "cases": {
        "$filter": {
          "input": "$cases",
          "as": "case",
          "cond": { "$eq": ["$$case.level", -1] }
        }
      },
      "_id": 1 // 按需添加其他需要保留的字段
    }
  }
]);

内容的提问来源于stack exchange,提问作者Bentaiba Miled Basma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:24:24