Mongoose Cast to ObjectId 的值失败

san*_*ngh 2 mongoose mongodb node.js

我在猫鼬中有以下模式

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;
Run Code Online (Sandbox Code Playgroud)

和 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");
    });
});
Run Code Online (Sandbox Code Playgroud)

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

 { [CastError: Cast to ObjectId failed for value "[object Object]" at path "voters"]
     message: 'Cast to ObjectId failed for value "[object Object]" at path "voters"',
Run Code Online (Sandbox Code Playgroud)

dvl*_*lsg 5

您已voters定义为ObjectIdref,但您试图在其中存储实际User表示。

假设我正确理解你的链接,你要查找的_idUser通过req.body.email,然后进行更新{ $push: { voters: userId } }(这里userId是对的IDUser你找到)。