Mon goose не сообщает об ошибке при обновлении, но не обновляет - PullRequest
1 голос
/ 01 апреля 2020

схожу с ума из-за чего-то для обновления документа mongodb с понедельника goose, не сообщая ни об одной ошибке, но фактически не обновляясь успешно.

У меня есть эта схема:

/**
 * Branch Schema
 */
let BranchSchema = new Schema({
  name: String,
  domain: String,
  email: String,
  bm: { type: Schema.ObjectId, ref: 'User' },
  st: [{ type: Schema.ObjectId, ref: 'User' }],
  stockCurrent: {
    paper: Schema.Types.Object,
    ink: Schema.Types.Object
  },
  stockNeeded: {
    paper: Schema.Types.Object,
    ink: Schema.Types.Object
  },
}, { versionKey: false, usePushEach: true });

mongoose.model('Branch', BranchSchema);

Пытаясь обновить stockCurrent, используя эту логику c:

        Branch.findById(config.branch.id, function (err, branch) {
            if (err) {
                res.status(422).send({
                    message: 'הסניף לא נמצא'
                });
            } else {
                console.log(branch);
                Object.keys(req.body.stock).forEach(function (type) {
                    Object.keys(req.body.stock[type]).forEach(function (code) {
                        if (req.body.stock[type][code] > 0) {
                            if (typeof branch.stockCurrent[type][code] === 'undefined') {
                                branch.stockCurrent[type][code] = 0;
                            }
                            branch.stockCurrent[type][code] += req.body.stock[type][code];
                        }
                    });
                });
                console.log(branch);

                branch.save(function (err, updated) {
                    console.log("err: " + err);
                    if (err) {
                        stock.remove();
                        res.status(422).send({
                            message: 'שגיאה בשמירת מלאי'
                        });
                    } else {
                        console.log(updated);
                        res.send({
                            message: 'מלאי נוסף בהצלחה'
                        });
                    }
                });
            }
        });

, я добираюсь до части успеха, имея в своем консольном журнале это:

{
   "_id":5dd276a6bcc29a13789fcecb,
   "name":"בצלאל ארכיטקטורה",
   "domain":"bezalel.eazix.io",
   "email":"eazix.1.bezalel@gmail.com",
   "bm":5cdd2130d192ea03a87d2dfd,
   "stockNeeded":{
      "ink":{
         "GY":2,
         "PM":2,
         "M":2,
         "MBK":2,
         "PBK":2,
         "PC":2,
         "Y":2,
         "C":2,
         "waste":2
      },
      "paper":{
         "COATED":5,
         "PLAIN":5,
         "PHOTO":3
      }
   },
   "stockCurrent":{
      "paper":{
         "PLAIN":0
      },
      "ink":{
         "waste":0
      }
   },
   "st":[

   ]
}{
   "_id":5dd276a6bcc29a13789fcecb,
   "name":"בצלאל ארכיטקטורה",
   "domain":"bezalel.eazix.io",
   "email":"eazix.1.bezalel@gmail.com",
   "bm":5cdd2130d192ea03a87d2dfd,
   "stockNeeded":{
      "ink":{
         "GY":2,
         "PM":2,
         "M":2,
         "MBK":2,
         "PBK":2,
         "PC":2,
         "Y":2,
         "C":2,
         "waste":2
      },
      "paper":{
         "COATED":5,
         "PLAIN":5,
         "PHOTO":3
      }
   },
   "stockCurrent":{
      "paper":{
         "COATED":1,
         "PHOTO":2,
         "PLAIN":0
      },
      "ink":{
         "PM":1,
         "waste":0
      }
   },
   "st":[

   ]
}**"err":null**{
   "_id":5dd276a6bcc29a13789fcecb,
   "name":"בצלאל ארכיטקטורה",
   "domain":"bezalel.eazix.io",
   "email":"eazix.1.bezalel@gmail.com",
   "bm":5cdd2130d192ea03a87d2dfd,
   "stockNeeded":{
      "ink":{
         "GY":2,
         "PM":2,
         "M":2,
         "MBK":2,
         "PBK":2,
         "PC":2,
         "Y":2,
         "C":2,
         "waste":2
      },
      "paper":{
         "COATED":5,
         "PLAIN":5,
         "PHOTO":3
      }
   },
   "stockCurrent":{
      "paper":{
         "COATED":1,
         "PHOTO":2,
         "PLAIN":0
      },
      "ink":{
         "PM":1,
         "waste":0
      }
   },
   "st":[

   ]
}

Я вижу здесь начальную состояние, обновленная версия перед сохранением, и ошибка: null, и якобы обновленный документ.

но, увы! документ не был действительно обновлен. это остается тем же самым.

Я пробовал много вещей, ища и ища подобные случаи, проверяя мою схему, добавляя useStrict: false к схеме, ничего не помогает.

Пн goose ver 4.13.20, Mongodb вер. 3.6.17

SOS

Дор

1 Ответ

1 голос
/ 02 апреля 2020

Полагаю, проблема в SchemaTypes? В понедельник goose 4.x это единственные допустимые типы схем :

String
Number
Date
Buffer
Boolean
Mixed
Objectid
Array

Обратите внимание, что Mixed является опцией, но не Object. Вам нужно сообщить Mongoose, что вы обновили поле Mixed, используя model.markModified('pathName'). См. Смешанные документы .

Так что в вашем случае код ниже может решить проблему:

branch.markModified('stockCurrent');
branch.save(function (err, updated) {
// ...
...