Mongoose中是否可以仅通过键名查询Map类型字段内的元素
解决方案
你可以直接使用MongoDB的$exists运算符实现该需求,该运算符会匹配包含指定字段的文档,不需要指定具体匹配值:
let user = await User.findOne({ 'socialHandles.instagram': { $exists: true } });
取值方式
查询到结果后,由于你定义的socialHandles是Mongoose的Map类型,需要调用get()方法获取对应键的值:
const instagramHandle = user.socialHandles.get('instagram');
可选过滤规则
如果你需要额外过滤掉键存在但值为null的场景,可以在查询条件中追加$ne规则:
let user = await User.findOne({ 'socialHandles.instagram': { $exists: true, $ne: null } });
动态键查询
如果需要查询的键名是动态变量,可以用模板字符串拼接查询字段:
const targetKey = 'instagram'; // 可替换为任意动态键名 let user = await User.findOne({ [`socialHandles.${targetKey}`]: { $exists: true } });
内容的提问来源于stack exchange,提问作者ArunJose
相关产品推荐
相关产品推荐

