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

如何在Mongo Shell中查询展示字段名包含指定关键词的字段

MongoDB匹配字段名查询实现方法

MongoDB的find方法投影参数仅支持显式指定字段名,不支持直接传入正则匹配字段名,因此你之前尝试的db.persons.find({}, {/.*friend.*/: 1})无法生效。

方案1:聚合管道实现(推荐,MongoDB 5.0及以上版本适用)

通过$objectToArray、$filter组合完成字段名匹配,可直接从数据库侧返回符合要求的结果:

db.persons.aggregate([
  // 将contacts对象转为键值对数组,方便过滤
  {
    $addFields: {
      contactList: { $objectToArray: "$contacts" }
    }
  },
  // 过滤键名包含friend的元素
  {
    $addFields: {
      contactList: {
        $filter: {
          input: "$contactList",
          cond: {
            $regexMatch: {
              input: "$$this.k",
              regex: /friend/
            }
          }
        }
      }
    }
  },
  // 将过滤后的数组转回对象格式
  {
    $addFields: {
      contacts: { $arrayToObject: "$contactList" }
    }
  },
  // 移除临时辅助字段
  { $unset: "contactList" }
])

你也可以根据需要在管道最后追加$project阶段,指定是否返回name等其他字段。

方案2:应用层过滤(兼容所有版本,小数据集适用)

如果你的MongoDB版本较低,或者数据量不大,可以先查询完整文档,在业务代码中过滤字段:

// 以Node.js环境为例
const persons = await db.persons.find().toArray();
const processedPersons = persons.map(item => {
  const friendContacts = {}
  Object.keys(item.contacts).forEach(key => {
    if (key.includes('friend')) {
      friendContacts[key] = item.contacts[key]
    }
  })
  return {
    ...item,
    contacts: friendContacts
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:15:00