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

MongoDB如何基于数组中的对象筛选文档?

MongoDB 查询包含指定颜色预测的文档

针对你描述的文档结构,要筛选color predictions数组中包含目标颜色列表任一颜色的文档,有两种实现方式:

1. 固定颜色列表的查询语句

如果目标颜色是固定的(比如['Brown', 'Navy Blue']),可以直接用$or结合$elemMatch检查每个颜色是否存在于预测数组中:

db.yourCollectionName.find({
  $or: [
    { "color predictions": { $elemMatch: { Brown: { $exists: true } } } },
    { "color predictions": { $elemMatch: { "Navy Blue": { $exists: true } } } }
  ]
})
  • $elemMatch用于匹配数组中至少一个元素满足条件,这里检查元素是否包含指定颜色的键
  • $exists: true确保该颜色键存在于预测元素中,无需关心对应数值的类型

2. 动态颜色列表的通用查询语句

如果目标颜色列表是动态生成的,用$expr结合聚合操作符实现更灵活的匹配:

// 定义目标颜色列表
const targetColors = ['Brown', 'Navy Blue'];

db.yourCollectionName.find({
  $expr: {
    $anyElementTrue: {
      $map: {
        input: "$color predictions",
        as: "predItem",
        in: {
          $in: [
            // 提取当前预测元素的颜色键(每个元素只有一个键)
            { $arrayElemAt: [ { $objectKeys: "$$predItem" }, 0 ] },
            targetColors
          ]
        }
      }
    }
  }
})
  • $objectKeys提取每个预测元素的键(即颜色名称)
  • $arrayElemAt取第一个键(因为每个预测元素只有一个颜色键值对)
  • $in判断提取的颜色是否在目标列表中
  • $map将数组每个元素转换为布尔值,$anyElementTrue只要有一个元素匹配就返回该文档

注意:将上述代码中的yourCollectionName替换为你的实际集合名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:20:20