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

MongoDB嵌套对象多条件查询:筛选符合类ID与数量要求的分组

MongoDB 分组筛选解决方案

需求说明

需要筛选满足以下两个条件的分组:

  • 分组必须包含id为101、102、103的classes条目
  • id为101和102的classes的quantity数值小于100(注意示例中quantity为字符串类型,需转换为数值比较)

查询语句

db.collection.find({
  $expr: {
    $and: [
      // 验证分组包含所有目标id的classes
      { $allElementsTrue: [
        { $map: {
          input: ["101", "102", "103"],
          as: "targetId",
          in: { $in: ["$$targetId", "$classes.id"] }
        }}
      ]},
      // 验证id=101的quantity < 100
      { $lt: [
        { $toInt: { $arrayElemAt: ["$classes.quantity", { $indexOfArray: ["$classes.id", "101"] }] } },
        100
      ]},
      // 验证id=102的quantity < 100
      { $lt: [
        { $toInt: { $arrayElemAt: ["$classes.quantity", { $indexOfArray: ["$classes.id", "102"] }] } },
        100
      ]}
    ]
  }
})

语句解释

  1. 条件1处理:通过$map遍历目标id数组,逐个检查每个id是否存在于当前分组的classes.id集合中,再用$allElementsTrue确保所有目标id都存在。
  2. 条件2和3处理:先用$indexOfArray定位目标id在classes数组中的位置,再用$arrayElemAt取出对应的quantity值,通过$toInt将字符串转换为数值后,与100做小于比较。

示例数据结果分析

对提供的3个分组逐一验证:

  • group1:id=101的quantity为"100",转换后等于100,不满足小于100的要求,被排除。
  • group2:缺少id=103的classes条目,不满足条件1,被排除。
  • group3:id=102的quantity为"240",转换后大于100,不满足要求,被排除。

最终没有符合所有条件的分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:05:00