Как прочитать NodeJS форму данных и записать в MongoDB - PullRequest
0 голосов
/ 02 февраля 2020

Я создал простую динамическую c одностраничную форму, которая отображает количество полей в зависимости от количества человек. Я использовал расширенную настройку в анализаторе тела для отправки вложенных объектов в мой html.

Когда я консольный журнал req.body я получаю это:

    {
    user: {
        '10': {
            attending: '1',
            dietaryRequirements: 'None'
        },
        '11': {
            attending: '0',
            dietaryRequirements: 'Not Applicable'
        }
    }
}

Что будет Самый простой способ прочитать ID (10 и 11) и записать поля с требованиями к посещению и питанию в MongoDB. Спасибо за любую помощь!

1 Ответ

1 голос
/ 02 февраля 2020

Что ж, вы должны сначала определить схему.

//this is ../models/user.model file

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
//Define user model schema
const userSchema = new Schema({
    _id: String,
    attending: { type: Number, required: true },
    dietaryRequirements: String,
}, {
    timestamps: true
});
const User= mongoose.model('users', userSchema );
module.exports = User;

Затем вы получаете пользователя как объект, поэтому вам нужно вставить данные в массив как объекты. Схеме, которую вы определили. когда вы добавляете пользовательские объекты в массив, вы можете легко вызывать метод mon goose insertMany(), полученный из пользовательской схемы.

const User= require('../models/user.model');
const { user } = req.body;
console.log(user );
let userItems= Object.keys(user).map(userItem => {
         return {
               _id: userItem,
               attending: user[userItem ].attending,
               dietaryRequirements: user[userItem ].dietaryRequirements,
          }
 });
 try {
      await User.insertMany(userItems);

      res.status(200).json({ status: true });
  } catch (error) {
      console.log(error);
  }

этот User.insertMany(userItems) метод 'await', пока все данные не сохранятся в mon go db, следовательно, вы должны использовать ключевое слово 'asyn c' в express router.

Подробнее здесь

обновить несколько случайных пользователей

Здесь вы можете использовать асинхронный l oop, тогда код будет быстрым.

let updateResponces = await Promise.all(userItems.map(user=>{
   User.updateOne({ _id: user._id }, { attending: 'true'});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...