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

回到顶部