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

MongoDB查询问题:筛选banco1且无box投资的银行文档

解决MongoDB查询问题:筛选指定银行且无特定投资项的文档

首先,咱们来拆解你的需求:你要找根级banco字段为"banco1",并且**investimentos数组里完全没有productName为"box"的投资项**的文档。你的原查询存在几个关键问题,咱们一步步修正:

原查询的问题分析

  1. 字段名不匹配:你写的是"investments",但示例文档里的数组字段是"investimentos"(葡萄牙语拼写),这直接导致查询找不到目标数组。
  2. 逻辑方向错了:你把根级银行的筛选条件塞进了$elemMatch里,这意味着你在找数组里有一个元素同时满足bank: "banco1"和productName: {$ne: "box"}——但你要的是整个文档属于banco1,且数组里彻底没有"box"这个投资项,完全不是一个逻辑。
  3. 语法小错误:$ne条件里的"box"少了一个闭合引号,这也会让查询直接失效。

正确的查询语句

根据你的需求,这里有两种靠谱的写法:

方法1:$not + $elemMatch(逻辑更清晰,推荐)

这种写法明确表达:数组里不存在任何productName为"box"的元素,同时匹配根级银行字段:

db.banks.find({
  "banco": "banco1", // 注意:如果你的实际文档里是"banco 1"(带空格),要改成对应值
  "investimentos": {
    $not: {
      $elemMatch: {
        productName: "box"
      }
    }
  }
})

方法2:$nin(写法更简洁)

如果productName是每个投资项都必有的字段,也可以用$nin来筛选:

db.banks.find({
  "banco": "banco1",
  "investimentos.productName": { $nin: ["box"] }
})

验证你的示例文档

针对你给出的两个示例:

  • 第一个文档banco是"banco 1",且数组里有productName: "box"的项,所以不会被查询返回。
  • 第二个文档banco是"banco2",不符合银行条件,也不会被返回。
    要是有一个banco为"banco1"且数组里完全没有"box"的文档,就会被正确匹配到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:36:02