如何在MongoDB中创建嵌套的层级Map模式结构

xoshrz7s  于 2022-10-04  发布在  Go
关注(0)|答案(1)|浏览(124)

我试图创建一个对象结构,其中包含动态的年份和月份&后面是每个月的数据。

我的期待

{
    "2022": {
            "january": {
                    "cards":  [
                        {
                                "name":"Card Name",
                                "amount":100,
                                "date":  "2021-07-06T20:30:00.000Z" 
                        }
                    ]
                },
                "february": {
                    "cards":  [
                        {
                                "name":"Card Name",
                                "amount":100,
                                "date":  "2021-07-06T20:30:00.000Z" 
                        }
                    ]
                }
        },
       "2023": {
            "March": {
                    "cards":  [
                        {
                                "name":"Card Name",
                                "amount":100,
                                "date":  "2021-07-06T20:30:00.000Z" 
                        }
                    ]
                }
        }, 
}

我在Map上找到了一个关卡

const DynamicSchema = new Schema({
    year: {
        type: Map,
        of: String,
    }
});

我能够创建这个✅

{
        "year": {
             "2022": "test"
            }
    }

尝试使用下面的架构,但以错误❌结束

const DynamicSchema = new Schema({
    year: {
        type: Map,
        of: [Map],
        month: {
            type: Map,
            of: [Map],
        }
    }
});

请求负载:

{
    "year": {
         "2022": {
             "month": "34"
            }
        }
}

“错误”:路径“Year.$*”中值“{Month:‘34’}”(类型对象)的“强制转换为字符串失败”

我的结构能不能用MongoDB实现?如果是,任何提示都会有帮助

qfe3c7zg

qfe3c7zg1#

您的有效载荷本身是错误的:

{
    "year": {
         "2022": {
             "month": "34"
            }
        }
}

您按如下方式定义了您的架构:

const DynamicSchema = new Schema({
    year: {
        type: Map,
        of: [Map],
        month: {
            type: Map,
            of: [Map],
        }
    }
});

请注意,这里将1d0d1e定义为Map。但是,您在有效负载中为它传递了一个字符串34。因此,34到map的转换失败,因此出现错误。尝试在您的有效载荷中发送Map:

{
        "year": {
             "2022": {
                 "month": {
                    "Jan": "34"
                  }
                }
        }
}

相关问题