【问题标题】:Resolving the OverwriteModelError in mongoose解决 mongoose 中的 OverwriteModelError
【发布时间】:2020-07-08 06:43:02
【问题描述】:

您好,我使用 nodejs 编写了一个 Lambda 函数来从 mongodb 检索数据,它工作正常。稍后我使用 API 生成链接并查看该链接中的输出。现在输出显示在控制台中,但在该 API 中显示 OverwriteModel 错误。我在 API 中附加了我的代码和输出。我现在该怎么办?

const mongoose = require('mongoose')
const models=()=>{

mongoose.connect('---',{useNewUrlParser:true,useCreateIndex:true,useUnifiedTopology:true})

const wavicle = mongoose.model('Datasetlist',{Dataset:[{id:Number,dataset:String,parameter: 
{name:String}]}]})

const me = wavicle.find({})
return me
}

const main = async(event)=>{
console.log('EVENT:',event)
return models()
}

exports.handler = main

控制台输出:

[
{
"_id": "5f05714c96db3e0007ae3595",
"Dataset": [
{
"parameter": [
{
"_id": "5f05714c96db3e0007ae3597",
"name": "StoreName"
 },
 {
 "_id": "5f05714c96db3e0007ae3598",
 "name": "Dates"
 },
 {
 "_id": "5f05714c96db3e0007ae3599",
 "name": "TransDesc"
 },
 {
 "_id": "5f05714c96db3e0007ae359a",
 "name": "Amount"
 },
 {
 "_id": "5f05714c96db3e0007ae359b",
 "name": "credit"
 },
 {
 "_id": "5f05714c96db3e0007ae359c",
 "name": "total"
 }
 ],
 "_id": "5f05714c96db3e0007ae3596",
 "id": 1,
 "dataset": "Daily Food Report"
 }
 ],
 "__v": 0
 }
 ]

API 输出:

{
"errorType": "OverwriteModelError",
"errorMessage": "Cannot overwrite `Datasetlist` model once compiled.",
"trace": [
"OverwriteModelError: Cannot overwrite `Datasetlist` model once compiled.",
"    at Mongoose.model (/var/task/node_modules/mongoose/lib/index.js:524:13)",
"    at models (/var/task/index.js:7:26)",
"    at Runtime.main [as handler] (/var/task/index.js:18:12)",
"    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
]
}

【问题讨论】:

    标签: node.js mongodb lambda


    【解决方案1】:

    "errorType": "OverwriteModelError" 表示你正在重写Datasetlist模型 它们已经存在于您的数据库中,以不同的 Schema 或相同的名称存在,例如 DataSetlist 或 DATASETLIST 或 dataSetlist 。

    先删除之前的模型。

    然后运行你的代码,这一次它将创建新模型而没有任何错误

    【讨论】:

    • wavicle 应该是“Wavicle”(第一个字母应该是大写,创建模型时应该遵循这个命名法)
    • 是的,我改成了 Wavicle,但错误依旧
    • 将 mongoose.connect(....) 放在第二行,紧跟在“const mongoose = require('mongoose')”之后
    • 是的,我达到了预期的结果,你的想法和我一样。无论如何,非常感谢@abid ali
    【解决方案2】:

    我正在定义 mongodb 连接并在模型函数中创建 mongoose 模型,因此每次它重复创建具有相同名称和相同架构的 mongoose 模型并覆盖时,它都会显示错误“overwritemodelerror”。现在我将猫鼬模型和 mongodb 连接部分保留在模型函数之外

    const mongoose = require('mongoose')
    
    mongoose.connect('mongodb+srv://Sethu16:Sethu16@@samplecluster.xtrb0.mongodb.net/Wavicle?retryWrites=true&w=majority',{useNewUrlParser:true,useCreateIndex:true,useUnifiedTopology:true})
    const Wavicle = mongoose.model('Datasetlist',{Dataset:[{id:Number,dataset:String,parameter:[{name:String}]}]})
    
    const models=()=>{
    
    const me = Wavicle.find({})
    return me
    }
    
    const main = async(event)=>{
        console.log('EVENT:',event)
        return models()
    }
    
    exports.handler = main
    

    控制台输出:

    [
      {
        "_id": "5f05714c96db3e0007ae3595",
        "Dataset": [
          {
            "parameter": [
              {
                "_id": "5f05714c96db3e0007ae3597",
                "name": "StoreName"
              },
              {
                "_id": "5f05714c96db3e0007ae3598",
                "name": "Dates"
              },
              {
                "_id": "5f05714c96db3e0007ae3599",
                "name": "TransDesc"
              },
              {
                "_id": "5f05714c96db3e0007ae359a",
                "name": "Amount"
              },
              {
                "_id": "5f05714c96db3e0007ae359b",
                "name": "credit"
              },
              {
                "_id": "5f05714c96db3e0007ae359c",
                "name": "total"
              }
            ],
            "_id": "5f05714c96db3e0007ae3596",
            "id": 1,
            "dataset": "Daily Food Report"
          }
        ],
        "__v": 0
      }
    ]
    

    API 输出:

    [
    {
    "_id": "5f05714c96db3e0007ae3595",
    "Dataset": [
    {
    "parameter": [
    {
    "_id": "5f05714c96db3e0007ae3597",
    "name": "StoreName"
    },
    {
    "_id": "5f05714c96db3e0007ae3598",
    "name": "Dates"
    },
    {
    "_id": "5f05714c96db3e0007ae3599",
    "name": "TransDesc"
    },
    {
    "_id": "5f05714c96db3e0007ae359a",
    "name": "Amount"
    },
    {
    "_id": "5f05714c96db3e0007ae359b",
    "name": "credit"
    },
    {
    "_id": "5f05714c96db3e0007ae359c",
    "name": "total"
    }
    ],
    "_id": "5f05714c96db3e0007ae3596",
    "id": 1,
    "dataset": "Daily Food Report"
    }
    ],
    "__v": 0
    }
    ]
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2021-04-15
      • 2021-05-18
      • 1970-01-01
      • 2020-04-16
      • 2015-09-30
      • 2020-04-24
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多