2015-10-15 66 views
0

我正在建立一個平均應用程序與快遞和貓鼬。我有兩個模式,userSchema和courseSchema:允許用戶添加項目到他們的配置文件Mongoose

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' }] 
    }); 

我能夠創建用戶和課程(作爲管理員)。我現在想要做的是讓每個用戶在他的課程列表中添加一個課程(或者只需點擊課程旁邊的「喜歡」按鈕,該課程將添加到他的個人資料中)。

在控制器的側面,我嘗試檢查會話中的用戶標識,找到該用戶並將該課程添加到他的文檔中。但這就是我卡住的地方,

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); 
    }); 

我看到的大多數解決方案都不是很清楚。任何幫助,將不勝感激。

回答

0

解決:

我用$ addToSet的課程對象添加到用戶模型中的課程數組:

這可能是人們尋找類似soutions有用:

我的用戶架構:

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貓鼬=需要( '貓鼬'), 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中間件首先檢索當前的更新用戶模型的課程陣會話中的用戶標識,並使用$ 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); 
     } 
    ); 
}; 

因爲我只用了的了的ObjectId的在用戶模型的courses數組內部,我不得不使用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); 
    }) 
    }; 
相關問題