简体   繁体   中英

How to implement mongoose discriminators?

I want to use mongoose discriminator for my project to create a collection of users in which there is a document of owner which I want to implement using discriminators. But I am getting an error of

throw new Error('The 2nd parameter to mongoose.model() should be a ' + ^

Error: The 2nd parameter to mongoose.model() should be a schema or a POJO at Mongoose.model (D:\Github\Food-Delivery-Website\node_modules\mongoose\lib\index.js:473:11) at Object. (D:\Github\Food-Delivery-Website\models\Owner.js:21:27)

Code is given below:

// This file is models/User.js
const mongoose = require('mongoose');
const { Schema } = mongoose;

const options = { discriminatorKey: 'kind' };

const UserSchema = new Schema(
  {
    userName: {
      type: String,
      required: true,
      unique: true,
    },
    restOwned: {
      // type: [Schema.Types.ObjectId],
      type: Number,
    },
  },
  options,
);

module.exports = mongoose.model('User', UserSchema);

Below is the next file

// This file is models/Owner.js
const mongoose = require('mongoose');
const { Schema } = mongoose;

const User = require('./User');

const OwnerSchema = User.discriminator(
  'Owner',
  new Schema({
    isOwner: {
      type: Boolean,
      required: true,
    },
    restName: {
      type: String,
      required: true,
    },
  }),
);

module.exports = mongoose.model('Owner', OwnerSchema);

Then I import these two files in userController.js

//This file is controllers/userController.js

const User = require('../models/User');
const Owner = require('../models/Owner');

exports.addUser = async (req, res) => {
  try {
    const newUser = new User({
      userName: req.body.userName,
      restOwned: req.body.restOwned,
    });

    const user = await newUser.save();

    res.status(201).json({
      status: 'Success',
      user,
    });
  } catch (err) {
    res.status(500).json({
      status: 'failed',
      message: 'Server Error: Failed Storing the Data.',
      err,
    });
  }
};

exports.addOwner = async (req, res) => {
  try {
    const newOwner = new Owner({
      isOwner: req.body.isOwner,
      restName: req.body.restName,
    });

    const owner = await newOwner.save();

    res.status(201).json({
      status: 'Success',
      owner,
    });
  } catch (err) {
    res.status(500).json({
      status: 'failed',
      message: 'Server Error: Failed Storing the Data.',
      err,
    });
  }
};

What am I doing wrong here?

enter image description here

The Model.discriminator() method returns a Model.

So you can directly export the discriminator and use it as the model

// This file is models/Owner.js
const mongoose = require('mongoose');
const { Schema } = mongoose;

const User = require('./User');

//Directly export the discriminator and use it as the model
module.exports = User.discriminator(
  'Owner',
  new Schema({
    isOwner: {
      type: Boolean,
      required: true,
    },
    restName: {
      type: String,
      required: true,
    },
  }),
);

//module.exports = mongoose.model('Owner', OwnerSchema);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM