在用户注册中已经添加了其他字段的架构中,使用mongoose在MongoDB中插入数组

我正在创build在线课程的申请。 我为用户注册创build了一个模式。 在架构中,我也想添加一个用户在注册的课程的名称。 课程名称是一个数组。 用户注册成功。 之后,我创build了/仪表板的路线,用户发送POST请求添加课程名称。 该课程应该添加到注册课程的相同注册模式字段中。 但是,当我保存一个注册模式的新对象时,它会创build一个新的文档字段courseEnrolled字段。 我希望这个POST请求值被添加到用户的文档字段当然是以数组forms进行注册。

这是我如何定义我的注册模式。 它的名字在account.js

var mongoose = require('mongoose'); var Schema = mongoose.Schema; var passportLocalMongoose = require('passport-local-mongoose'); var courseSchema = new Schema({ courseName : String }); var Account = new Schema({ username: { type: String, unique: true }, password: String, email: String, firstName: String, lastName: String, courseEnrolled: [{courseName : String}] }); Account.plugin(passportLocalMongoose); module.exports = mongoose.model('Account', Account); 

这是我的护照注册。 register.js

 var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var User = require('../models/account'); var bCrypt = require('bcrypt-nodejs'); var course = require('../models/courseEnrollment'); module.exports = function(passport){ passport.use('register', new LocalStrategy({ passReqToCallback : true // allows us to pass back the entire request to the callback }, function(req, username, password, done) { findOrCreateUser = function(){ // find a user in Mongo with provided username User.findOne({ 'username' : username }, function(err, user) { // In case of any error, return using the done method if (err){ console.log('Error in SignUp: '+err); return done(err); } // already exists if (user) { console.log('User already exists with username: '+username); return done(null, false, req.flash('message','User Already Exists')); } else { // if there is no user with that email // create the user var newUser = new User(); var newCourse = new course(); // set the user's local credentials newUser.username = username; newUser.password = createHash(password); newUser.email = req.body.email; newUser.firstName = req.body.firstName; newUser.lastName = req.body.lastName; newUser.courseEnrolled = req.body.courseEnrolled; // save the user newUser.save(function(err) { if (err){ console.log('Error in Saving user: '+err); throw err; } console.log('User Registration succesful'); return done(null, newUser); }); } }); }; // Delay the execution of findOrCreateUser and execute the method // in the next tick of the event loop process.nextTick(findOrCreateUser); }) ); // Generates hash using bCrypt var createHash = function(password){ return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); } } 

我可以成功注册一个用户。 之后,我有一个/仪表板的路线,我在那里处理POST请求添加课程。 这是处理POST请求的我的/仪表板的片段。

 var User = require('../models/account'); /* POST dashboard Page */ router.post('/dashboard', isAuthenticated, function (req, res) { sess = req.session.passport.user; console.log('session value is: ' + sess); var newUser = new User(); console.log('newUser id is: ' + newUser._id); var currentUser = req.user._id; console.log('current User id is: ' + currentUser); var myUser = req.user; console.log('myUsers value is: ' + myUser); var myUserCourse = req.user.courseEnrolled; if (sess == currentUser) { //var newCourse = new course(); console.log('request received: ' + req.body.courseEnrolled); req.user.courseEnrolled = req.body.courseEnrolled; newUser.save(function (err, data) { if(error) throw error; else { console.log('course Updated'); } }); res.render('home', {user: req.user}); } }); 

这个newUser.save()函数在mongodb中创build一个新文档并存储courseEnrolled。 我想将req.body.course Enrolled的值存储在定义其他用户值的相同文档字段中。

这是存储在集合: – “帐户”的用户

 { "_id" : ObjectId("57f95afd9c78b91c69334f0d"), "lastName" : "Nehra", "firstName" : "Ashish", "email" : "ashish.nehra@stanford.edu", "password" : "$2a$10$YzLvbQTHFtq5l0ooP0njOux94Rp.pm.Pkb/TugBnCSTUJNhBBonLG", "username" : "ashish", "courseEnrolled" : [ "about to change something now" ], "__v" : 1 } 

在同一个集合中有一个像这样的新文档。

 { "_id" : ObjectId("5803fc4342ca1d3167102300"), "courseEnrolled" : [ ], "__v" : 0 } 

这是合乎逻辑的,因为首先你要在不同的用户对象(req.user / new user)上做一个它:

 **var newUser = new User(); 

这将创build一个新的用户对象,然后:

 newUser.save(function (err, data) { 

这将把新创build的用户保存到一个新的文档中。 如果你想使用.save,重写它(重用你自己的代码):

 User.findOne({ 'username' : username }, function(err, user) { // In case of any error, return using the done method if (err){ console.log('Error in SignUp: '+err); return done(err); } user.courseEnrolled = req.body.courseEnrolled; user.save(function (err, data) { if(err) throw err; else { console.log('course Updated'); } });