Вставка String в базу данных с использованием nodeJS и mongoDB - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в JS и использую стек MEAN, чтобы создать место, где студенты могут добавлять классы в свой профиль пользователя.У меня уже есть хранилище сеансов в моей базе данных, поэтому «req.user» вернет текущую информацию о вошедшем в систему пользователе, и, в частности, «req.user.id» вернет идентификатор текущего вошедшего в систему пользователя.Кроме того, я выяснил, как искать курс в моей базе данных из моего приложения.В конечном счете, моя цель состоит в том, чтобы, когда пользователь отправляет запрос на публикацию для поиска в базе данных, я также хотел, чтобы эти «значения» помещались в «ключ» классов.Я предоставил два варианта, оба из которых не добавляют соответствующие строки в базу данных.Спасибо за любую помощь!

Часть Search.JS Option # 1

router.post('/', ensureAuthenticated, function (req,res,next) {
    var query = {course: req.body.coursename};
    db.collection('courses').find(query).toArray()
    .then(db.collection('DefaultUser').update({_id: req.user.id}, {$push: {classes: req.body.coursename}}));
    res.render('search', {title: 'search'})
});

Часть Search.JS Option # 2

router.post('/', ensureAuthenticated, function(req,res,next) {
    var query = {course: req.body.coursename};
    db.collection('courses').find(query).toArray((err, results) => {
        if (err) {
            throw err;
        } else {
            db.collection('DefaultUser').updateOne({_id: '5c17161d3347e79410ff29ba'}, {
                                                                $push: {
                                                                    classes: req.body.coursename
                                                                }
                                                            })
            console.log(results)
            res.render('search', {courses: results, title: 'search'})
        }
    })
});

1 Ответ

0 голосов
/ 17 декабря 2018

Некоторые советы могут помочь:

  1. req.body ничего не удержит, если вы забудете использовать app.use(express.urlencoded()) для анализа опубликованных данных.
  2. Выможет использовать ObjectId('<string>') (в опции # 2) для поиска и обновления запросов, а не только строку, потому что mongodb сохраняет _id как ObjectId тип по умолчанию.
  3. Вы можете использовать $addToSet вместо модификатора $push для добавления уникального элемента в массив, или вы можете получить подписку на одного ученика еще на два класса, если он неоднократно отправляет форму.
  4. ВВаш код вы сначала находите в коллекции courses, а затем обновляете, но поскольку вы ничего не сделали с результатом поиска, это не является необходимым (пустой результат не выдает никакой ошибки).Проверка правильности данных является хорошей практикой, если вы хотите сделать это, в обоих вариантах вам нужно использовать findOne вместо find, чтобы убедиться, что курс существует, и .then(course => {/* check if the course is null and then throws an error */} ).

У меня нет полного кода вашего проекта, поэтому я могу только догадываться, что могут быть проблемы, перечисленные выше, желаю вам удачи!

...