Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 允许用户将项目添加到其配置文件Mongoose_Angularjs_Node.js_Mongodb_Mean - Fatal编程技术网

Angularjs 允许用户将项目添加到其配置文件Mongoose

Angularjs 允许用户将项目添加到其配置文件Mongoose,angularjs,node.js,mongodb,mean,Angularjs,Node.js,Mongodb,Mean,我正在用express和mongoose构建一个mean stack应用程序。我有两个模式,userSchema和courseSchema: var mongoose = require('mongoose'), Schema = mongoose.Schema; var courseSchema = mongoose.Schema({ title:{type:String, required:'{PATH} is required!'},

我正在用express和mongoose构建一个mean stack应用程序。我有两个模式,userSchema和courseSchema:

 var mongoose = require('mongoose'),
          Schema = mongoose.Schema;    
    var courseSchema = mongoose.Schema({
      title:{type:String, required:'{PATH} is required!'},
      featured:{type:Boolean, required:'{PATH} is required!'},
      published:{type:Date, required:'{PATH} is required!'},
      courseLink:{type:String, required:'{PATH} is required!'},
      user: [{type:Schema.Types.ObjectId, ref : 'User'}]

    });

var Course = mongoose.model('Course', courseSchema);

module.exports = Course;

var userSchema = mongoose.Schema({
        firstName: {type: String, required: true},
        lastName: {type: String, required: true},
        username: {
                    type: String,
                    required: true,
                    unique: true    // creates unique index inside MongoDB          
        },
        salt: {type: String, required: true},
        hashed_pwd: {type: String, required: true},
        roles:[String],
        courses:[{type: Schema.ObjectId, 
                 ref: 'Course' }]
    });
我能够创建用户和课程(作为管理员)。我现在想做的是允许每个用户将一门课程添加到他的课程列表中(或者只需单击课程旁边的“喜欢”按钮,该课程就会添加到他的个人资料中)

在控制器方面,我尝试从会话中检查用户id,找到该用户并将课程添加到他的文档中。但这就是我被困的地方

exports.addMyCourse = function(req, res){
  console.log('user id', req.session.passport.user);
  console.log('id', req.body._id);
    var currentUserId = req.session.passport.user;

    User.findOne({'_id':currentUserId}, function(err, doc){
        console.log(doc);
  });
我看到的大多数解决方案对此不是很清楚。任何帮助都将不胜感激。

解决:

我使用$addToSet将课程对象添加到用户模型内的课程数组中:

这可能对搜索类似资源的人有用:

我的用户架构:

var userSchema = mongoose.Schema({

        firstName: {type: String, required: true},
        lastName: {type: String, required: true},
        username: {
                    type: String,
                    required: true,
                    unique: true    // creates unique index inside MongoDB          
        },
        salt: {type: String, required: true},
        hashed_pwd: {type: String, required: true},
        roles:[String],
        courses:[{
            type:Schema.ObjectId, ref:'Course'
        }]
    });
var User = mongoose.model('User', userSchema);
我的课程模式: var mongoose=require('mongoose'), Schema=mongoose.Schema

var courseSchema = mongoose.Schema({
  title:{type:String, required:'{PATH} is required!'},
  featured:{type:Boolean, required:'{PATH} is required!'},
  published:{type:Date, required:'{PATH} is required!'},
  courseLink:{type:String, required:'{PATH} is required!'}
});    

var Course = mongoose.model('Course', courseSchema);
在我的控制器文件夹中,我有users.js和courses.js:

在courses.js文件中,我创建了addMyCourses中间件来更新用户模型的课程数组,方法是首先从会话中检索当前用户的id,并使用$addToSet插入对象,同时避免重复。此外,我还确保只添加课程的ObjectId,而不是整个课程文档,这样我以后就不会在一个文档中出现太多数据的问题:

exports.addMyCourse = function(req, res){
  var myCourse = {
        title: req.body.title,
        featured: req.body.featured,
        published: req.body.published,
        courseLink: req.body.courseLink
  };

  var currentUserId = req.session.passport.user;   

  var courseId = req.body._id;

  User.update({_id:currentUserId},
        {$addToSet: {"courses": courseId}},
        {safe: true, upsert: true, new : true},
        function(err, model) {
            console.log(model);
        }
    );
};
因为我在用户模型的courses数组中只有课程的ObjectId,所以我必须使用mongoose的populate()方法对这两个模型进行联合查询,以便获得ID的相应课程文档

在users.js文件中:

exports.getUserCourses = function(req, res, next){
      var currentUserId = req.session.passport.user; 
  User.findById(currentUserId).populate('courses')
    .exec(function(err, data){
      if(err) {
        console.log(err);
      } 
      console.log('user courses', data);
      res.send(data);
    })
  };