mongoose TypeError: Schema is not a constructor

mongoose TypeError: Schema is not a constructor

我遇到了一件奇怪的事情。我有几个猫鼬模型 - 其中一个(只有一个!)我得到这个错误:

TypeError: Schema is not a constructor

我觉得这很奇怪,因为我有几个工作模式。我尝试在非工作模式中记录 mongoose.Schema,它确实与我工作模式中的 mongoose.Schema 不同 - 这怎么可能?代码几乎相同。 这是非工作模式的代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var errSchema = new Schema({
  name: String,
  images:[{
    type:String
  }],
  sizes:[{
    type: String
  }],
  colors:[{
    type: Schema.ObjectId,
    ref: 'Color'
  }],
  frontColors:[{
    type: Schema.ObjectId,
    ref: 'Color'
  }],
  script: Boolean
},{
  timestamps: true
});

var Err = mongoose.model('Err', errSchema);

module.exports = Err;

工作模式代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var colorSchema = new Schema({
  name: String,
  image: String,
  rgb: String,
  comment: String,
});

var Color = mongoose.model('Color', colorSchema);

module.exports = Color;

如有任何帮助,我们将不胜感激!

应该是Schema.Types.ObjectId,不是Schema.ObjectIdhttp://mongoosejs.com/docs/schematypes.html

我遇到过同样的事情。我以前有这样的代码

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema();
    var schema = new Schema({
        path : {type:string , required:true},
        title: {type:string , required: true}
    })
 module.export = mongoose.model('game', schema);

然后我使用下面的脚本解决了构造函数问题

   var mongoose = require('mongoose');
    var schema = mongoose.Schema({
        path : {type:string , required:true},
        title: {type:string , required: true}
    })
 module.export = mongoose.model('game', schema);

我来晚了,但下面的代码对我有用,可能对使用 mongoose 5.2.15 版的人有帮助

const mongoose = require('mongoose');
const Scheme = mongoose.Schema;

const ItemSchema = new Scheme({
    name: {
        type: String,
        require: true
    },
    date: {
        type: Date,
        default: Date.now
    }
});

module.exports = Item = mongoose.model('Item', ItemSchema);

我通过导入大写模式解决了这个问题。

上一个:

const Scheme = mongoose.schema;

修复后:

const Schema = mongoose.Schema;

完整架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ItemSchema = new Schema({
    name : {
        type: String,
        required : true
    },
    date : {
        type : Date,
        default : Date.Now
    }
});
module.exports = mongoose.model('Item', ItemSchema);

使用mongoose.Schema代替let Schema = mongoose.Schema();

我遇到了同样的问题

上一个代码

module.export = mongoose.model('AllClassList', allClassListSchema);

正确的代码

module.exports = mongoose.model('AllClassList', allClassListSchema);

我在导出结束时漏掉了“s”

在我的案例中,问题是导出应该在最后:

问题:导出中缺少 (s)

module.export = mongoose.model('Event', EventSchema);

解决方法:将(s)添加到exports

module.exports = mongoose.model('Event', EventSchema);

对于仍然有错误的任何人

  1. 检查 package.json 上的 mongoose 版本,看看它是否是旧版本
  2. 重新安装到最新版本

对我有用!!

我遇到这个问题,我的解决方案是在 module.export 中添加 (s),但我忘记在最后添加 s,这就是为什么我的架构不是构造函数。

问题既不是大写 Schama,也不是忘记导出“s”。 它不小心删除了:“('mongoose')”,而我正在编码!!!所以我又添加了它!问题已解决!!

const mongoose = require('mongoose');
import mongoose from "mongoose";

connectDB(mongoURI); // database connection

// create schema 

    const student = new mongoose.Schema({
      name: String,
      workout: Boolean,
      height: Number,
    });
    
   // create model in students collections

    const Student = new mongoose.model("Student", student);
  
     // store data
    const adder = async () => {
   
      const ss = await Student.create({
        name: "jiya",
        workout: true,
        height: 6,
      });
    
    };
    

    //call function
    adder();

我在 _Schema

的帮助下尝试了这个
const mongoose = require('mongoose');
const _schema  = mongoose.Schema;
//creat schema
const IdeaSchema = new _schema({
    title: {
        type: String,
        required: true
    },
    details: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    }
});
module.exports = mongoose.model('ideas', IdeaSchema);