Схема Mongoose не создает правильные объекты с заданными атрибутами

#javascript #mongoose #mongoose-schema

#javascript #mongoose #mongoose-schema

Вопрос:

Mongoose не сохраняет правильную схему. Атрибуты отсутствуют во вновь созданном объекте.

Моя схема выглядит следующим образом:

 const ProfileSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: "users"
  },
  handle: {
    type: String,
    required: true,
    max: 40
  },
  dateOfBirth: {
    type: Date
  },
  expenses: {
    tyep: String
  },
  income: {
    type: String
  },
  experience: [
    {
      title: {
        type: String
      }
    }
  ],
  education: [
    {
      school: {
        type: String
      }
    }
  ],
  partner: {
    partnerIncome: {
      type: String
    },
    partnerExpenses: {
      tyep: String
    }
  },
  date: {
    type: Date,
    default: Date.now
  }
});
  

И код для создания нового объекта является :

 new Profile(profileFields)
            .save()
            .then(profile => {
              //res.json(profileFields);
              res.json(profile);
            })
            .catch(err => {
              res.json(err);
            });
  

Данные в profileFeild следующие:

 {
    "user": "5cbf0d03b6a1d33d085c5a41",
    "handle": "aaaaaaaaaaaaa",
    "dateOfBirth": "02/02/2019",
    "income": "600",
    "expenses": "300",
     "partnerIncome": "900",
     "partnerExpenses": "200"

}
  

Сообщение успешно сохраняется как

 {
    "partner": {
        "partnerIncome": "900"
    },
    "_id": "5cbfd9b2dc38893364f25063",
    "user": "5cbf0d03b6a1d33d085c5a41",
    "handle": "aaaaaaaaaaaaa",
    "dateOfBirth": "2019-02-01T13:00:00.000Z",
    "income": "600",
    "experience": [],
    "education": [],
    "date": "2019-04-24T03:36:18.643Z",
    "__v": 0
}
  

Мы можем видеть, что расходы и партнерские расходы отсутствуют. Как это произошло? И как исправить эту проблему?

Если я использую findOneAndUpdate для обновления, а затем отправлю те же данные profileFields, все поля будут выглядеть следующим образом (что является ожидаемым результатом в первый раз).

 {
    "expenses": "300",
    "partner": {
        "partnerExpenses": "200",
        "partnerIncome": "900"
    },
    "_id": "5cbfd9b2dc38893364f25063",
    "user": "5cbf0d03b6a1d33d085c5a41",
    "handle": "aaaaaaaaaaaaa",
    "dateOfBirth": "2019-02-01T13:00:00.000Z",
    "income": "600",
    "experience": [],
    "education": [],
    "date": "2019-04-24T03:36:18.643Z",
    "__v": 0
}
  

Кстати, код для обновления находится здесь:

 Profile.findOneAndUpdate(
          { user: req.user.id },
          { $set: profileFields },
          { new: true }
        ).then(profile => res.json(profile));
  

Спасибо за любую помощь.

Ответ №1:

Есть опечатки

 expenses: {
tyep: String
},
  

и еще один

 partnerExpenses: {
  tyep: String
}
  

не могли бы вы попробовать после исправления этого.

Ответ №2:

Прежде всего, давайте преобразуем доход партнера, расходы партнера, издержки и доход в целое число или число в определении схемы.

и исправьте опечатки в

 expenses:{
tyep: String//must be spelt type
}
and
partnerExpenses:{
tyep: String//must be spelt type
}