Получение ошибки о $ pushAll при переходе на конечную точку, но нигде не используется - PullRequest
0 голосов
/ 22 октября 2018

У меня странный ...

Я разработал API с Node / Express / Mongoose, используя Mongodb 3.4.9, теперь это 3.4.17.

У меня нетидеально, но по какой-то причине блок кода, который я использовал целую вечность, выдает ошибку:

{name: "MongoError", message: "Unknown modifier: $pushAll", driver: true, index: 0, code: 9,…}
code: 9
driver: true
errmsg: "Unknown modifier: $pushAll"
index: 0
message: "Unknown modifier: $pushAll"
name: "MongoError"

Вот код:

router.route('/addemail/:id')

// ADD EMAILS
.put(function(req, res){
  Profile.findOne({'owner_id':req.params.id}, function(err, profile){
    if(err)
      res.send(err);
      profile.emails.push({
        email_type: req.body.email_type,
        email_address: req.body.email_address
      })
    profile.save(function(err){
      if(err)
        res.send(err);
      res.json(profile);
    });
  });
});

Как видите,Я не использую $ pushAll в этом блоке кода или где-либо еще в моем коде.

Что еще может быть причиной этого ???

Спасибо за любой совет гуру.

Обновление: вот моя модель для профиля, и я включаю следующую модель электронной почты:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;  
// SUBDOCUMENTS
var AddressesSchema = require('./profile/addresses');
var BusinessesSchema = require('./profile/businesses');
var EmailsSchema = require('./profile/emails');
var PhonesSchema = require('./profile/phones');
var SocialSchema = require('./profile/social');




// PROFILE (PARENT) MODEL
var ProfileSchema = new Schema({

    //PROFILE INFO
    owner_id: {
      type: String,
      require: true,
      unique: true
    },
    notice: {
      type: Number, // 1=profile, 2=profile and cards
    },
    first_name:{
      type: String
    },
    last_name:{
      type: String
    },
    initial:{
      type: String
    },
    birthday:{
      type: Date
    },
    highschool:{
      type: String
    },
    college:{
      type: String
    },
    facebook:{
      type: String
    },
    linkedin:{
      type: String
    },
    linkedin_bus:{
      type: String
    },
    twitter: {
      type: String
    },
    google: {
      type: String
    },
    pinterest: {
      type: String
    },
    user_image: {
      type: String
    },
    contacts:[{
      type:Schema.Types.ObjectId,
      ref:'Contact'
    }],

    //SUBDOCUMENTS
    emails:[EmailsSchema],
    phones:[PhonesSchema],
    addresses:[AddressesSchema],
    businesses:[BusinessesSchema],
    social:[SocialSchema]
});

module.exports = mongoose.model('Profile', ProfileSchema);

Вот как выглядит модель электронной почты:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;  



// CONTACT (PARENT) MODEL
var EmailSchema = new Schema({

    //CONTACT INFO
    email: {
      type: String,
      require: true
    },
    date_registered: {
      type: Date,
      default: Date.now
    }
});

module.exports = mongoose.model('Email', EmailSchema);

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Извините за вопрос, но почему бы вам просто не узнать:

// ADD EMAILS
.put(function(req, res) {
  Profile.update({'owner_id': req.params.id}, 
    {
      $addToSet: {
        email_type: req.body.email_type,
        email_address: req.body.email_address
    }
  });
});

Кажется, вы просто хотите добавить объект в массив в монго-документе на основе owner_id. $ addToSet делает это.

0 голосов
/ 22 октября 2018

Вы должны воспользоваться некоторыми приятными функциями mongodb, т.е. вы можете сделать это:

Profile.findOneAndUpdate({'owner_id':req.params.id},{addToSet:{emails:[ email_type: req.body.email_type, email_address: req.body.email_address]}}, function(err, profile){ 
    if(err){
        res.send(err);
     } else {
        res.json(profile);
    }
}
0 голосов
/ 22 октября 2018

Mongoose, вероятно, создает $pushAll под капотом, который, однако, был удален в более новой версии MongoDB, как вы можете видеть здесь .Вот почему вы получаете сообщение об ошибке.

Я предлагаю вам обновить систему до последней версии Mongoose, чтобы это исправить.

Также смотрите эти обсуждения репозитория Mongoose: https://github.com/Automattic/mongoose/issues/4455 https://github.com/Automattic/mongoose/issues/5574

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...