ObjectId的猫鼬商店数组

时间:2017-06-20 10:34:50

标签: mongoose mongoose-schema

我正在制作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 );
            }
        );
    });
});

1 个答案:

答案 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);