ObjectId的Mongoose存储数组

ObjectId的Mongoose存储数组,mongoose,mongoose-schema,Mongoose,Mongoose Schema,我有两个模型,我正在工作。一个用户可以有许多他喜欢的电影,并且一部电影可以被多个用户喜欢。我已决定将这些信息存储在每个用户中 我正在尝试将movieid存储在数组moviesLiked中,但每次保存时,它都会抛出一个错误,CastError:Cast to ObjectId在路径“moviesLiked”处的值“1234”失败。 我确实尝试检索movie对象并将movie.id推送到数组中,但它似乎对我不起作用,因此已将其删除。我可能做错了,如果有人告诉我应该朝哪个方向走,我会很高兴,因为我对猫

我有两个模型,我正在工作。一个用户可以有许多他喜欢的电影,并且一部电影可以被多个用户喜欢。我已决定将这些信息存储在每个用户中

我正在尝试将movieid存储在数组moviesLiked中,但每次保存时,它都会抛出一个错误,CastError:Cast to ObjectId在路径“moviesLiked”处的值“1234”失败。

我确实尝试检索movie对象并将movie.id推送到数组中,但它似乎对我不起作用,因此已将其删除。我可能做错了,如果有人告诉我应该朝哪个方向走,我会很高兴,因为我对猫鼬很陌生

资源基于

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数组应包含与电影模型中的默认_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类型