Схема вложенного массива с элементом object возвращает массив с пустым объектом - PullRequest
0 голосов
/ 24 сентября 2019

Я хочу иметь массив объектов, т.е. teamMembers должен быть массивом и должен иметь объект в качестве элемента со свойствами name и role. Я не получаю никакой ошибки, когда я console.log (req.body), его вформат, который я хочу, но элемент массива, который является объектом, не будет размещен в схеме.

  _id: mongoose.Schema.Types.ObjectId,
  teamName: { type: String, unique: true },
  teamMembers: {
    name: {
      type: String, unique: true, lowercase: true, required: true
    },
    role: {
      type: String,
      enum: ['goal keeper', 'central back', 'central midfield', 'central forward', 'left wing',
        'attacking midfield', 'central forward', 'left midfielder', 'striker', 'defending', 'right midfielder'],
      required: true
    },
    type: Array
  },
  description: String,
  createdAt: { type: Date, default: Date.now() },
  updatedAt: { type: Date, default: Date.now() }
});

teamSchema.plugin(uniqueValidator); ```


I am not getting the desired result. Here is my collection from mogodb

{
"_id":{"$oid":"5d89d5da3f33f36579bfed25"},
"teamMembers":[{}],
"createdAt":{"$date":{"$numberLong":"1569314251247"}},
"updatedAt":{"$date":{"$numberLong":"1569314251247"}},
"teamName":"Arsenal",
"__v":{"$numberInt":"0"}
}
Expected result
``` "teamMembers":[{"name": "bernd leno", "role": "goal keeper"}] ```

Gotten result ``` "teamMembers":[{}] ```

Here is my below

```static async addTeam(req, res) {
    const {
      teamName, teamMembers, description
    } = req.body;
    try {
      if (!req.user.isAdmin) {
        return response(res, 404, 'error', {
          message: messages.unAuthorizedRoute
        });
      }
      const teams = new TeamModel({
        _id: new mongoose.Types.ObjectId(),
        teamName,
        teamMembers,
        description
      });
      const team = await teams.save();
      if (team) {
        return response(res, 201, 'success', { team });
      }
    } catch (error) {
      (error.errors.teamName.name === 'ValidatorError')
        ? response(res, 409, 'error', {
          message: messages.duplicateName
        })
        : response(res, 400, 'error', {
          message: messages.error
        });
    }
  }```


1 Ответ

0 голосов
/ 24 сентября 2019

Мой код верен, я неправильно отправил массив объектов из почтальона. Правильный способ размещения массива объектов в почтальоне с использованием urlencoded

Он также работает с rawJSON / Urlencoded

{
    "teamName": "Arsenal",
    "teamMembers": [{"name": "bernd leno", "role":"goal keeper"}, {"name": "Emiliano Martinez", "role":"goal keeper"}]
}
...