如何在Mongoose中定义嵌套Map类型字段并获取指定属性?
问题解决:Mongoose中Map字段存嵌套对象的配置与属性获取
问题原因
你当前的Schema将files字段定义为Map且值类型为String:
const folder = new Schema({ files: { type: Map, of: String }, })
但实际要存储的是键为字符串、值为包含fileName/editLink/downloadLink的对象,类型不匹配导致抛出CastError——Mongoose试图把对象转成字符串失败。
解决方案:配置Map嵌套对象
正如你找到的,只需将Map的of属性指定为对应的对象结构即可,这就实现了你所说的类似"Map:Map"(实际是Map of Object)的存储形式:
const folder = new Schema({ files: { type: Map, of: { fileName: { type: String }, editLink: { type: String }, downloadLink: { type: String }, }, }, });
这样Mongoose就能正确识别files字段中每个键对应的值是包含三个字符串属性的对象。
获取fileName等属性的方式
查询到文档后,files字段会被Mongoose处理为JavaScript的Map对象或普通JS对象(默认取决于Mongoose版本,也可通过toObject()转换),两种情况的获取方式如下:
- 若为普通JS对象:
// 假设查询到的文档实例为folderDoc const fileName = folderDoc.files['054wrtrd'].fileName; - 若为Map对象:
const fileName = folderDoc.files.get('054wrtrd').fileName;
内容的提问来源于stack exchange,提问作者Revisionnaire
相关产品推荐
相关产品推荐

