Как я могу вставить данные пользовательской схемы в основную схему, используя mongoose - PullRequest
0 голосов
/ 06 июня 2019

Я новичок в этом и не понимаю, как вставить данные дочерней схемы в массив родительской схемы .:

Моя дочерняя схема модель определяется как: -

 //user model
    var userrSchema = new mongoose.Schema({
        email :     {
                    type: String,
                    required: "Email can't be empty.",
                    // unique: true
                    },
        password:   {
                    type: String,
                    required: "Password name can't be empty."
                    },
    });
mongoose.model('Userr' , userrSchema);

И я определил родительскую (Admin) схему как: -

//define admin schema 
var adminSchema = new mongoose.Schema({
    companyName : {
                type: String,
                required: "Company  name can't be empty.",
                required: false
                },
    admins:     {
                        _id: mongoose.Schema.Types.ObjectId,
                        email :     {
                                    type: String,
                                    required: "Email can't be empty.",
                                    unique: true
                                    },
                        password:   {
                                    type: String,
                                    required: "Password name can't be empty."
                                    },
                        users:[ userrSchema ]   
    }           
});

mongoose.model('Admin', adminSchema);

Я определил оба в одном файле модели. У меня есть controlle r для регистрация родительской схемы: -

mongoose.model('Admin', adminSchema);


const Admin = mongoose.model('Admin');
var MongoClient = require('mongodb').MongoClient;

module.exports.registerAdmin = (req, res, next) =>{ 
    var admin = new Admin();
    admin.companyName = req.body.companyName;
    admin.admins = {
                    email : req.body.email,
                    password: req.body.password,
                    users : [] 
    }; 
admin.save((err, doc) =>{

После регистрации схемы администратора из файла маршрута: - router.post('/registerAdmin' , ctrlAdmin.registerAdmin) Я получаю результат как: -

{
    "admins": {
        "email": "xyz@ing.com",
        "password": "$2a$10$juGvica8UTqtmyywnWQuKOo9KpqX9JeFfqy1n6GR4xDL2GMLM0hze",
        "users": []
    },
    "_id": "5cf8b54e66b45740ae68feac",
    "companyName": "ABC"
    "__v": 0
}

Так как мне зарегистрировать дочернюю схему и вставить ее детали в ключ родительской схемы users ?? Пожалуйста помоги . Я новичок в этом и не понимаю, как вставить данные дочерней схемы.

РЕДАКТИРОВАТЬ: - Обновлена ​​функция сохранения с авторизацией администратора

Создан контроллер для дочерней схемы, но после запуска URL ничего не происходит:

    module.exports.registerUserr = (req, res, next) =>{ 

        var userr = new Userr();
        userr.email = req.body.email,
        userr.password = req.body.password, 
        userr.firstName = req.body.firstName, 
        userr.lastName = req.body.lastName,
        userr.phoneNumber = req.body.phoneNumber,
        userr.role = "user",
        userr.verified = "false"
        userr.save((err, doc) =>{

        if(!err){
            if(req.userData.role2 === 'admin') {
            console.log("saving successful");
            res.send(doc);
            Admin.findOneAndUpdate({ _id: req.userData.userId },{ admins : { $push: { users: doc }}},
              function (error, success) {
                if (error) {
                  console.log(error);
                }
                console.log(success);
              });
        }             
        }
});

и в маршруте router.post('/registerUserr' ,checkAuth, ctrlUserr.registerUserr);

1 Ответ

0 голосов
/ 06 июня 2019

Попробуйте заменить функцию сохранения на

userr.save((err, doc) => {
  if (!err) {
    res.send(doc);
    Admin.findOneAndUpdate(
      { _id: req.body.id },
      { admins: { $push: { users: userr }}},
      function (error, success) {
        if (error) {
          console.log(error);
        }
        console.log(success);
      }
    });
  }
}
...