如何在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
相关产品推荐
相关产品推荐

