MongoDB - Найти и обновить объект массива - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь обновить объект, но у меня возникают проблемы с его обновлением. Пожалуйста, проверьте схему:

const personSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  teachers: [
    {
      name: {
        type: String,
      },
      information: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'info',
      }],
    },
  ],

Мне нужно обновить информацию внутри этой схемы, которую я пытаюсь сделать (создан - это объект создан):

const person = await ctx.models.person
    .findOneAndUpdate({
      teachers: {
        $elemMatch: {
          teachers: {
            _id: input.processId,
          },
        },
      },
    },
    {
      $push: {
        teachers: {
          information: created,
        },
      },
    }, {
      new: true,
    });

1 Ответ

0 голосов
/ 24 января 2019

Прежде всего, как рекомендовано здесь официальными документами MongoDb, вам не нужно $ elemMatch:

Если в выражении $ elemMatch указано только одно условие, вам не нужно использовать $ elemMatch.

Кроме того, я рекомендую использовать точечную запись для поиска.Ваш код будет таким:

const person = await ctx.models.person
    .findOneAndUpdate({
      "teachers._id" : input.processId
    },
    {
      $push: {
        teachers: {
          information: created,
        },
      },
    }, {
      new: true,
    });
...