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

MongoDB:属性名动态变化时如何查询体重小于1的动物文档?

解决MongoDB动态键下的体重查询问题

因为你的文档中animals下的动物类型(比如cats、mouses)是动态变化的,MongoDB不支持直接用*作为通配符匹配键名,所以得通过对象转数组的方式遍历所有动物类型,再检查体重条件。

直接用find结合$expr就能实现需求,查询语句如下:

db.collection.find({
  $expr: {
    $anyElementTrue: {
      $map: {
        input: { $objectToArray: "$animals" },
        as: "animalType",
        in: {
          $anyElementTrue: {
            $map: {
              input: "$$animalType.v",
              as: "animal",
              in: { $lt: ["$$animal.weight", 1] }
            }
          }
        }
      }
    }
  }
})

语句说明:

  1. $objectToArray: "$animals":把animals对象转换成键值对数组,比如第二个文档会转成[{k: "dogs", v: [...]}, {k: "chickens", v: [...]}, {k: "mouses", v: [...]}]
  2. 外层$map:遍历每个动物类型(比如mouses),拿到对应的动物数组$$animalType.v
  3. 内层$map:遍历当前动物类型下的每只动物,判断其weight是否小于1,返回布尔值数组
  4. 内层$anyElementTrue:检查当前动物类型下是否存在至少一只体重小于1的动物
  5. 外层$anyElementTrue:只要animals下有任意一个动物类型符合条件,整个文档就会被匹配

内容的提问来源于stack exchange,提问作者François MENTEC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:52:27