我正在制作2个型号。用户可以拥有他喜欢的许多电影,并且可以由多个用户喜欢电影。我决定将这些信息存储在每个用户中。
我正在尝试将movieid存储在数组movieLiked中,但每次保存时都会抛出错误, CastError:强制转换为ObjectId失败的值' 1234'在路径' 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);
movie.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 );
}
);
});
});
答案 0 :(得分:0)
您自己的ID是Number类型,但您的moviesLiked数组需要类型ObjectId。
您的moviesLiked数组应包含与Movie模型中默认_id字段对应的ID列表。
我相信引用只能引用_id但是如果你想使用自己的id,那么你可以尝试在你的MovieSchema中将_id设置为你自己的id,然后在你的UserSchema中设置你的moviesLiked类型匹配:
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);