ObjectId的Mongoose存储数组
我有两个模型,我正在工作。一个用户可以有许多他喜欢的电影,并且一部电影可以被多个用户喜欢。我已决定将这些信息存储在每个用户中 我正在尝试将movieid存储在数组moviesLiked中,但每次保存时,它都会抛出一个错误,CastError:Cast to ObjectId在路径“moviesLiked”处的值“1234”失败。 我确实尝试检索movie对象并将movie.id推送到数组中,但它似乎对我不起作用,因此已将其删除。我可能做错了,如果有人告诉我应该朝哪个方向走,我会很高兴,因为我对猫鼬很陌生 资源基于 user.jsObjectId的Mongoose存储数组,mongoose,mongoose-schema,Mongoose,Mongoose Schema,我有两个模型,我正在工作。一个用户可以有许多他喜欢的电影,并且一部电影可以被多个用户喜欢。我已决定将这些信息存储在每个用户中 我正在尝试将movieid存储在数组moviesLiked中,但每次保存时,它都会抛出一个错误,CastError:Cast to ObjectId在路径“moviesLiked”处的值“1234”失败。 我确实尝试检索movie对象并将movie.id推送到数组中,但它似乎对我不起作用,因此已将其删除。我可能做错了,如果有人告诉我应该朝哪个方向走,我会很高兴,因为我对猫
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 );
}
);
});
});
您自己的id是Number类型,但moviesLiked数组需要ObjectId类型 moviesLiked数组应包含与电影模型中的默认_id字段相对应的id列表 我相信refs只能引用_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: 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);
您是将模式中的电影id作为路由参数传递还是将mongodb_id作为路由参数传递。我曾经尝试检索movieId的findById()并将mongo\u id与movie.id一起传递,但结果仍然相同。将默认MongoDB\u id作为路由参数传递,而不是在模式中定义的id字段。我尝试了它并更新了我的代码。它仍然不起作用。我是否偶然错误地提取了id?您自己的id是Number类型,但moviesLiked数组需要ObjectId类型