Mongoose create () вносит нежелательные изменения в документы

0

В настоящее время я работаю над проектом, основанным на MEAN, и я подключаю часть mongo + node к AngularJS. Я использую Mongoose для схем, что очень удобно, но я встречаю странное поведение с вложенными схемами. Я создаю документ в AngularJS, который я отправляю в часть Node.js с запросом $ http.post. При его получении логика сервера использует функцию Model.create Mongoose для вставки ее в коллекцию. Он успешно выполняет, но функции create не хватает частей документа и заменяет некоторые вложенные объекты на Booleans.

Вот вывод Node.js при получении документа:

 { title: 'First Try',
  branch: 2,
  app: { name: 'Agirc Arrco' },
  time: 
   { periodNumber: 26,
     periodDisplay: '27/06/2016',
     submitDate: 1467304996377 },
  author: { name: 'Doe', surname: 'John', id: 0 },
  meta: 
   { read: false,
     priority: 3,
     color: 'light-green',
     type: true,
     id: 6,
     gathered: false },
  elements: 
   [ { title: 'Sample',
       description: 'Sample',
       priority: 3,
       app: [Object],
       color: 'light-green',
       type: 1,
       id: 0 } ],
  holidayData: 
   { start: '30/06/2016',
     startDisplay: '30/06/2016',
     end: '',
     endDisplay: '' },
  comments: '',
  rights: 
   { editable: { level: false, branch: false, people: [Object] },
     restriction: { level: false, branch: false, people: [Object] } } }

Вот результат после того, как документ был вставлен в коллекцию:

{ __v: 0,
  title: 'First Try',
  meta: true,
  comments: '',
  _id: 57754c24b322186ef2ace2c0,
  author: { name: 'Doe', surname: 'John', id: 0 },
  rights: 
   { restriction: { level: false, branch: false, people: [Object] },
     editable: { level: false, branch: false, people: [Object] } },
  elements: [ true ],
  time: 
   { periodNumber: 26,
     periodDisplay: '27/06/2016',
     submitDate: 1467304996377 },
  app: { name: 'Agirc Arrco' } }

Вот схема Mongoose:

var Report = mongoose.model('Report',{
  title : String,
  app : {name : String, id : Number},
  time : {periodNumber : Number, periodDisplay : String, submitDate : Number},
  meta : {
    read : Boolean,
    priority : Number,
    color : String,
    type : Boolean,
    id : Number
  },
  elements : [{
    title : String,
    description : String,
    type : Number,
    priority : Number,
    color : String,
    app : {name : String, id : Number}
  }],
  rights : {
    editable : {
      level : Boolean,
      branch : Boolean,
      people : [{id : Number, bool : Boolean}]
    },
    restriction : {
      level : Boolean,
      branch : Boolean,
      people : [{id : Number, bool : Boolean}]
    }
  },
  comments : String,
  author : {name : String, surname : String, id : Number}
});

И логика на стороне сервера:

app.post('/api/reports',function(req,res){
  var report = req.body;
  console.log(report);
  Report.create(report, function(err,report){
    if(err) res.send(err);
    console.log('Created:');
    console.log(report);
    console.log('Error? ');
    console.log(err);
    //Reload reports
    Report.find(function(err,reports){
      if(err) res.send(err);
      res.json(reports);
    });
  });
});

Ошибка Mongoose не возникает, так как я получаю "нулевой" вывод при отображении переменной err. Любой ключ к этой проблеме был бы оценен, я не нашел ни одного случая, который бы соответствовал этому...

Спасибо!

Теги:
express
mongoose

1 ответ

0
Лучший ответ

Нельзя использовать ключевые слова Mongoose в качестве свойств полей в схеме.
meta: { read: Boolean, priority: Number, color: String, type: Boolean, id: Number },
Например, "type" указывает тип поля в Mongoose, поэтому из вышеприведенного фрагмента mongoose предполагает, что поле "meta" является логическим, потому что вы указали его "тип". Просто переименуйте 'type' в другое.
Кроме того, у вас нет "ветки" и "holidayData" в вашей схеме.

  • 0
    Где я могу узнать обо всех ключевых словах Mongoose?
  • 0
    просто прочитайте документы mongoosejs.com/docs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню