【问题标题】:Mongoose Store Array of ObjectIdObjectId 的 Mongoose 存储数组
【发布时间】:2017-11-22 20:34:41
【问题描述】:

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

我正在尝试将 movieid 存储在数组 moviesLiked 但每次保存时都会引发错误,CastError: Cast to ObjectId failed for value '1234' at path '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);

电影.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 );
            }
        );
    });
});

【问题讨论】:

  • 您是从架构中传递电影 id 作为路由参数还是 mongodb _id?
  • 它作为路由参数传递。我曾尝试检索 findById() 的 movieId 并在之前使用 movie.id 传递 mongo _id,但结果仍然相同。
  • 传递默认的 MongoDB _id 作为路由参数,而不是您在架构中定义的 id 字段
  • 我试过并更新了我的代码。它仍然不起作用。是不是我拉错了id?
  • 您自己的 id 是 Number 类型,但您的 moviesLiked 数组需要 ObjectId 类型

标签: mongoose mongoose-schema


【解决方案1】:

您自己的 id 是 Number 类型,但您的 moviesLiked 数组需要 ObjectId 类型。

您的 moviesLiked 数组应包含与您的电影模型中的默认 _id 字段相对应的 id 列表。

我相信 refs 只能引用 _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);

【讨论】:

    猜你喜欢
    • 2016-06-13
    • 2015-05-02
    • 2021-03-03
    • 2019-07-18
    • 1970-01-01
    • 2022-12-12
    • 2013-11-13
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多