Передать значение схемы вместо массива для создания документа с использованием mongoose

#node.js #express #mongoose

#node.js #выразить #mongoose

Вопрос:

Я хочу передать детали схемы вместо массива в моем коде. Как я могу сделать это в моем контроллере?

 module.exports.registerAdmin = (req, res, next) =>{ 
    var admin = new Admin();
    admin.email = req.body.email;
    admin.password = req.body.password;
    admin.firstName = req.body.firstName;
    admin.lastName = req.body.lastName;

    const reqq = crypto.createHash('md5').update(admin.companyName).digest('hex');

    let valueNum = reqq.match(/d/g).join("").toString().substring(0,6);

    admin.companyID = valueNum;
     console.log(valueNum);

 const arrayObj = [{con:'IND'},{con:'USA'},{con:'JPN'}];

    admin.save((err, doc) =>{
        if(!err){

            res.send(doc);

            var thingSchema = new mongoose.Schema({}, { strict: false, collection: valueNum });
            var Thing = mongoose.model(valueNum , thingSchema);
            var thing = new Thing(arrayObj); 
            thing.save();
            console.log(thing);
  

вместо arrayObj мне нужно передать детали моей модели схемы, чтобы я мог использовать ее для создания документа внутри коллекции, которую я создаю в коде.

РЕДАКТИРОВАТЬ: — Файл модуля схемы.

 var adminSchema = new mongoose.Schema({
    firstName : {
                type: String,
                required: "First name can't be empty."
                },
    lastName : {
                type: String,
                required: "Last name can't be empty."
                },              
    email :     {
                type: String,
                required: "Email can't be empty.",
                unique: true
                },
    password :  {
                type: String,
                required: "Password can't be empty",
                minlength: [6 ,"Password must be atleast 6 character long."]
                }
    saltSecret: String //this is user for encryption and decryption of password
});

mongoose.model('Admin', adminSchema);
  

Вложенный объект MongoDB:-

введите описание изображения здесь

Ответ №1:

Если вы пытаетесь передать admin документ в new Thing() , вы сначала попытаетесь получить его doc.schema.obj или doc.schema.paths (если вам нужно то же самое _id ), затем вы получите все свойства в массиве, создадите объект с парами ключ-значение и передадите его своему new Thing(arrObj) .

 admin.save((err, doc) =>{
        if(err) return err;
        res.send(doc);
        let arr = Object.keys(doc.schema.obj);
        let arrObj = {};
        arr.map(key => arrObj[key] = doc[key]);
        var thingSchema = new mongoose.Schema({}, { strict: false, collection: valueNum });
        var Thing = mongoose.model(valueNum , thingSchema);
        var thing = new Thing(arrObj); 
        thing.save();
        console.log(thing);
})
  

Я заметил, что ваша отправка документа ( res.send(doc) ) перед созданием экземпляра вашей Thing модели, конечно, res.send() завершает только HTTP-ответ и не останавливает выполнение вашего кода, но это единственный ответ, который вы могли бы отправить. Вы можете отправить только один ответ.

Комментарии:

1. Нет, вы не получили вопрос. Как вы можете видеть, я экспортирую Admin модуль в файл контроллера. Я хочу, чтобы тот же модуль схемы был на месте arrayObj

2. «Я хочу, чтобы тот же модуль схемы был на месте arrayObj «, на какую схему вы ссылаетесь? Что вы подразумеваете под «на месте of arrayObj «?

3. Я экспортирую схему из файла модели в контроллер. Я хочу иметь детали модели в arrObj . Массив, который я передаю прямо сейчас, предназначен только для тестирования. Вместо массива мне нужны детали схемы или, как я говорю, doc детали. Смотрите мое РЕДАКТИРОВАНИЕ .. включая файл модели.

4. «детали схемы или, как я говорю, детали документа». вам нужны свойства схемы (типы полей …) или документ (экземпляр вашего класса с «полями» и значениями)?

5. Я хочу, чтобы документ в arrObj