Mongoose存储数组ObjectId
我有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);
}
);
});
});
回答:
您自己的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);
以上是 Mongoose存储数组ObjectId 的全部内容, 来源链接: utcz.com/qa/263108.html