2017-06-20 109 views
0

我有2個模型,我正在處理。用戶可以擁有許多他喜歡的電影,並且電影可以被多個用戶喜歡。我決定將這些信息存儲在每個用戶中。Mongoose存儲數組ObjectId

我試圖存儲moviesLiked陣列中的movieid但每次我保存,它拋出一個錯誤,CastError:投射到的ObjectId在路徑失敗值'1234「moviesLiked」

我嘗試檢索電影對象,並將movie.id推入數組,但它似乎並沒有爲我工作,並從此刪除它。我可能一直在做錯事,如果有人告訴我,我應該向哪個方向前進,因爲我對貓鼬很新。

資源基礎上 Array of ObjectIds in Mongoose 3.8

user.js的

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    username: String, 
    moviesLiked: [{ type: Schema.ObjectId, ref: 'Movie' }] 
}); 

module.exports = mongoose.model('User', UserSchema); 

movie.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var MovieSchema= new Schema({ 
    id: Number, 
    name: String, 
}); 

module.exports = mongoose.model('Movie', MovieSchema); 
在我的路線

最後/ index.js

router.route('/api/users/:userid/:movieid').put(function(req, res) { 
    User.findByIdAndUpdate(
     req.params.userid, 
     { '$push': { 'moviesLiked': req.params.movieid } }, 
     function(err, user) { 
      console.log(user); 
     } 
    ); 
}); 

更新:取而代之的是id。雖然沒有工作。

router.route('/api/users/:userid/:movieid').put(function(req, res) { 
    Movie.findById(req.params.movieid, function(err, movies) { 
     User.findByIdAndUpdate(
      req.params.userid, 
      { '$push': { 'moviesLiked': movies.id } }, 
      function(err, user) { 
       console.log(user); 
      } 
     ); 
    }); 
}); 
+0

你傳遞你從你的模式作爲路由參數或mongodb _id r電影ID? –

+0

它作爲路由參數傳遞。我試圖檢索findById()movieId並傳遞mongo _id以及movie.id,但仍然是相同的結果。 –

+0

傳遞默認的MongoDB _id作爲路由參數,而不是您在模式中定義的id字段 –

回答

0

您自己的ID的類型爲Number,但您的moviesLiked數組需要類型ObjectId。

您的moviesLiked數組應該包含與Movie模型中默認_id字段對應的id列表。

我相信裁判只能參考_id,但如果你想用你自己的ID,那麼你可以嘗試在MovieSchema設置_id到您自己的ID,然後設置你的moviesLiked輸入您的UserSchema匹配:

user.js的

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    username: String, 
    moviesLiked: [{ type: Number, ref: 'Movie' }] 
}); 

movie.js

module.exports = mongoose.model('User', UserSchema); 


var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var MovieSchema= new Schema({ 
    _id: { type: Number, unique: true }, 
    name: String, 
}); 

module.exports = mongoose.model('Movie', MovieSchema);