Пн goose удалить элемент из массива - PullRequest
0 голосов
/ 21 января 2020

Это моя спа-схема.

const spaSchema = new Schema({
  name: String,
  contactNumbers: String,
  address: String,
  images: [String],
});

Я хочу удалить элемент в массиве изображений, где имя элемента равно 'ab c .jpg', а идентификатор документа равен x. Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Я не совсем уверен в вашем вопросе, поэтому я рассмотрю 2 варианта. В обоих случаях я предполагаю, что вы делаете обновление для коллекции spa.

1) Удаление поля images из документа

Для полного удаления поля images из требуемого документа вы можете использовать оператор MongoDB $ unset , например:

Оригинальный документ:

{
  _id : ObjectId('some_id'),
  name : 'abc.jpg',
  contactNumbers: '...',
  address: '...',
  images: ['...']
}

Метод обновления:

Spa.update(
 { name : 'abc.jpg', _id : ObjectId('some_id') },
 { $unset : { images : null } }
);

Это приведет к:

{
  _id : ObjectId('some_id'),
  name : 'abc.jpg',
  contactNumbers: '...',
  address: '...'
}

2) Удаление одного элемента в поле images

Если вы пытаетесь удалить только один элемент с указанным значением c из В массиве images можно использовать оператор MongoDB $ pull , например:

Оригинальный документ:

{
  _id : ObjectId('some_id'),
  name : '...',
  contactNumbers: '...',
  address: '...',
  images: ['123.jpg','abc.jpg','def.jpg']
}

Метод обновления:

Spa.update(
 { _id : ObjectId('some_id') },
 { $pull : { images : 'abc.jpg' } }
);

Это приведет к:

{
  _id : ObjectId('some_id'),
  name : '...',
  contactNumbers: '...',
  address: '...',
  images: ['123.jpg','def.jpg']
}

Я надеюсь, это то, что вы ищете. =]

1 голос
/ 21 января 2020

Чтобы удалить один элемент из изображений (где вы храните имя изображения), вы должны использовать $ pull, как показано ниже

Spa.update(
 { _id : mongoose.Types.ObjectId('some_id') },
 { $pull : { images : 'IMAGE_NAME_THAT_YOU_WANT_TO_REMOVE_FROM_ARRAY' } }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...