Mongoose Schema hasn't been registered for model

前端 未结 17 857
猫巷女王i
猫巷女王i 2020-11-27 15:00

I\'m learning the mean stack and when I try to start the server using

npm start

I get an exception saying that:

schema has         


        
相关标签:
17条回答
  • 2020-11-27 15:42

    It's not an issue with model export. I had the same issue.

    The real issue is that require statements for the models

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/news');
    require('./models/Posts');
    require('./models/Comments');
    

    were below the routes dependencies. Simply move the mongoDB dependencies above the routes dependencies. This is what it should look like:

    // MongoDB
    var mongoose = require('mongoose');
    mongoose.connect('mongodb://localhost/news');
    require('./models/Posts');
    require('./models/Comments');
    
    var routes = require('./routes/index');
    var users = require('./routes/users');
    
    var app = express();
    
    0 讨论(0)
  • 2020-11-27 15:43

    My problem was sort out using the below

    adminModel.findById(req.params.id).populate({ path: "users", model: userModel //User collection name })

    0 讨论(0)
  • 2020-11-27 15:44

    I also facing same issue but i resolved by removing module.exports

    module.exports = mongoose.model('user', userSchema); // remove module.exports
    and use like:: mongoose.model('user', userSchema);

    const mongoose = require('mongoose');
    const ObjectId = require('mongoose').ObjectId;
    
    var userSchema = new mongoose.Schema({
        Password: { type: String },  
        Email: { type: String, required: 'This field is required.', unique:true },  
        songs: [{ type: ObjectId, ref: 'Songs'}]
    });
    
    // Custom validation for email
    userSchema.path('Email').validate((val) => {
        emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return emailRegex.test(val);
    }, 'Invalid e-mail.');
    
    // module.exports = mongoose.model('user', userSchema);  // remove 'module.exports ='
    mongoose.model('user', userSchema); // resolved issue
    
    0 讨论(0)
  • 2020-11-27 15:47

    I used the following approach to solve the issue

    const mongoose = require('mongoose');
    const Comment = require('./comment');
    
    const PostSchema = new mongoose.Schema({
                title: String,
                link: String, 
                upvotes: { type: Number, default: 0 },
                comments: [{ type: mongoose.Schema.Types.ObjectId, ref: Comment }]
            });
    mongoose.model('Post', PostSchema);
    

    Please look, here ref don't have string type value, now it's referring to Comment schema.

    0 讨论(0)
  • 2020-11-27 15:52

    In my case, this issue because I haven't included the model or ref model into the application. So you should required Post model and Comment model in your node application.

    0 讨论(0)
  • 2020-11-27 15:53

    I was also facing the same problem. The solution to my problem was looking at the ref parameter which had a different name compared to the model I was actually exporting and hence no such model was found.

    userSchema.virtual('tasks', {
        ref: 'Task',
        localField: '_id',
        foreignField: 'owner'
    })
      
    

    Whereas what I had actually exported was :-

    const Tasks = mongoose.model('Tasks', taskSchema)
    
    module.exports = Tasks
    

    After rectifying the Task as Tasks my problem was solved

    0 讨论(0)
提交回复
热议问题