【发布时间】:2017-11-22 20:34:41
【问题描述】:
我正在研究 2 个模型。一个用户可以拥有许多他喜欢的电影,并且一个电影可以被多个用户喜欢。我决定将这些信息存储在每个用户中。
我正在尝试将 movieid 存储在数组 moviesLiked 但每次保存时都会引发错误,CastError: Cast to ObjectId failed for value '1234' at path 'moviesLiked'。
我确实尝试检索电影对象并将movie.id 推送到数组中,但它似乎对我不起作用,并且已将其删除。我可能做错了,如果有人告诉我应该朝哪个方向前进,我会很好,因为我对 Mongoose 很陌生。
资源基于 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);
电影.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var MovieSchema= new Schema({
id: Number,
name: String,
});
module.exports = mongoose.model('Movie', MovieSchema);
最后在我的 routes/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 );
}
);
});
});
【问题讨论】:
-
您是从架构中传递电影 id 作为路由参数还是 mongodb _id?
-
它作为路由参数传递。我曾尝试检索 findById() 的 movieId 并在之前使用 movie.id 传递 mongo _id,但结果仍然相同。
-
传递默认的 MongoDB _id 作为路由参数,而不是您在架构中定义的 id 字段
-
我试过并更新了我的代码。它仍然不起作用。是不是我拉错了id?
-
您自己的 id 是 Number 类型,但您的 moviesLiked 数组需要 ObjectId 类型