【问题标题】:Mongoose Cast to ObjectId failed for valueMongoose Cast to ObjectId 未能获得价值
【发布时间】:2017-01-08 09:13:10
【问题描述】:

我在猫鼬中有以下架构

var mongoose = require("mongoose");

var Schema = mongoose.Schema;
var UserSchema = new mongoose.Schema({
  email: { type: String, unique: true },

});
var User = mongoose.model('User', UserSchema);
var ReviewSchema = new Schema({
  schoolId: String,
  firstname: String,
  image_url: String,
  lastname: { type: String },
  email: String,
  rating: Number,
  review: String,
  time: { type: Date, default: Date.now },
  updated_at: Date,
  voters: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]

});


var Review = mongoose.model('Review', ReviewSchema);


module.exports = Review;

以及nodejs中的以下代码

app.post("/like", function (req, res) {
    var query = { id: mongoose.Types.ObjectId(req.body.id) };
    var voter = { email: req.body.email };
    var update = { $push: { 'voters': voter } };
    var options = { upsert: true, 'new': true };

    Review.findOneAndUpdate(query, update, options, function (err, doc) {
        console.log(err);
        res.end("done");
    });
});

当我向上述方法发送请求时,我收到以下错误消息

 { [CastError: Cast to ObjectId failed for value "[object Object]" at path "voters"]
     message: 'Cast to ObjectId failed for value "[object Object]" at path "voters"',

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您已将 voters 定义为 ObjectId 引用,但您试图在其中存储实际的 User 表示。

    假设我正确理解您的链接,您需要通过req.body.email 查找User_id,然后更新{ $push: { voters: userId } }(其中userIdUser 的ID你找到了)。

    【讨论】:

    • 我通过 id 查找评论,然后我将电子邮件地址推送到选民数组
    • 如果要将电子邮件地址存储在 voters 数组中,则必须修改定义以存储对象本身,而不是对 User 模型的引用。按照您现在的方式,您的模型应该将 User._id 存储在 Review.voters[] 中。
    • 如果我没记错的话,选民应该被定义为选民:[UserSchema]
    • 我认为你可以做到。说实话,我从来没有真正尝试过同时将模式重新用作内部模式以及直接导出的模型,但我认为它应该可以工作。如果遇到指针或其他问题,还可以定义一个ReviewVoterSchema,它还包含一个{ email } 字段。
    • 它正在创建一个新文档,因为它无法使用查询 var query = { id: mongoose.Types.ObjectId(req.body.id) }; 找到该文档,因为 mongoDb 将 id 存储在字段 _id 中。使用var query = { _id: mongoose.Types.ObjectId(req.body.id) }更新您的查询
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2013-02-03
    • 2018-09-29
    • 2015-04-25
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多