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

如何在MongoDB嵌套查询中使用*通配符匹配字段?

MongoDB 字段通配符查询实现方案

MongoDB 原生查询语法不支持直接使用 * 作为字段名的通配符,因此你写的{ "info.*.name":"a"}无法直接执行。要实现匹配info下任意子对象的name字段等于a的需求,可采用以下两种方案:

方案一:使用聚合管道查询

通过聚合操作将info对象转换为键值对数组,再筛选符合条件的文档:

db.collection.aggregate([
  // 将info对象转为键值对数组,结构为[{k: "123", v: {name: "a"}}, ...]
  { $addFields: { infoArray: { $objectToArray: "$info" } } },
  // 匹配数组中存在v.name等于"a"的文档
  { $match: { "infoArray.v.name": "a" } },
  // 移除临时添加的infoArray字段,返回原文档结构
  { $project: { infoArray: 0 } }
])

方案二:调整数据结构(推荐)

动态字段名(如123、1234这类无意义键)会增加查询和维护成本,更合理的结构是将info改为数组,把动态键作为字段值存储:

{
  id: "1",
  name: "abc",
  info: [
    { key: "123", name: "a" },
    { key: "1234", name: "a" }
  ]
}

调整后,直接用简单查询即可匹配目标文档:

db.collection.find({ "info.name": "a" })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:02:17