簡體   English   中英

無法將消息ID保存在用戶對象(貓鼬)中

[英]Unable to save message ID in user Object (Mongoose)

我的目標是使用Mongoose將消息推送到用戶對象的messages屬性(它是一個數組)中。 但是,嘗試保存用戶(user.save())時出現錯誤。 我在下面的代碼上做了這三個console.logs,看出了什么問題。 有人可以解決這個問題嗎?

console.log(user.messages);
            user.messages.push(result._id);
            console.log(user.messages)

            user.save(function (err, result) {
                console.log(err)
            });

因此,在我將消息推送到數組中之前,一個在緊隨其后,一個在嘗試保存用戶后檢查錯誤。 這給了我以下日志:

首先,一個空數組[]

第二,包含消息ID的數組

["5a5cdd894504771c80c8901a"]

第三,為什么不能正確保存用戶的錯誤:

{ MongoError: Unknown modifier: $pushAll
    at Function.MongoError.create (C:\Users\TijlD\Desktop\projects\03 MongoDB\node_modules\mongodb-core\lib\error.js:31:11)
    at toError (C:\Users\TijlD\Desktop\projects\03 MongoDB\node_modules\mongodb\lib\utils.js:139:22)
    at C:\Users\TijlD\Desktop\projects\03 MongoDB\node_modules\mongodb\lib\collection.js:1059:67
    at C:\Users\TijlD\Desktop\projects\03 MongoDB\node_modules\mongodb-core\lib\connection\pool.js:469:18
    at process._tickCallback (internal/process/next_tick.js:150:11)
  name: 'MongoError',
  message: 'Unknown modifier: $pushAll',
  driver: true,
  index: 0,
  code: 9,
  errmsg: 'Unknown modifier: $pushAll' }

這是服務器端的代碼(node.js)

router.post('/', function (req,res,next){
        // We stored the user in the token so we can retrieve it from this token.
        // fetch the user (in the token) who reached this route


    // we use the jwt package to decode the token ( we wont be able to grab the user if we skip this step)
    // the decode method does not check if the token is valid, this happens
    // higher up in this file. we only decode it to grab the user. If we hadn't
    // protected our route we wouldve had to use a different strategy (.verify method)
    var decoded = jwt.decode(req.query.token);

    User.findById(decoded.user._id, function(err, user){

        if (err) {
            return res.status(500).json({
                title: 'An error occurred',
                error: err
            });
        }
        var message = new Message({
            content: req.body.content,
            user: user._id
        });
        message.save(function(err, result) {

            if (err) {
                return res.status(500).json({
                    title: 'An error occurred',
                    error: err
                });
            }
            console.log(user.messages);
            user.messages.push(result._id);
            console.log(user.messages)

            user.save(function (err, result) {
                console.log(err)
            });
            res.status(201).json({
                message: 'Saved message',
                // this object is what we'll receive in the front-end
                // and what we'll convert using the response.json() method
                obj: result
            });
        });
    });
});

這是用戶模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');

var schema = new Schema({
    firstName: {type: String, required: true},
    lastName: {type: String, required: true},
    password: {type: String, required: true},
    email: {type: String, required: true, unique: true},
    messages: [{type: Schema.Types.ObjectId, ref: 'Message'}]
});

schema.plugin(mongooseUniqueValidator);

module.exports = mongoose.model('User', schema);

根據此問題 ,已棄用$pushAll ,可以通過在模式選項中設置{ usePushEach: true }來解決此問題。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');

var schema = new Schema({
    firstName: {type: String, required: true},
    lastName: {type: String, required: true},
    password: {type: String, required: true},
    email: {type: String, required: true, unique: true},
    messages: [{type: Schema.Types.ObjectId, ref: 'Message'}]
}, { usePushEach: true });

schema.plugin(mongooseUniqueValidator);

module.exports = mongoose.model('User', schema);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM