Как отключить поле в Mongoose с помощью findByIdAndUpdate

Я использую стек MEAN. В моем бэкэнде я использую функцию findByIdAndUpdate в Mongoose для выполнения операции обновления в CRUD. Я также использую средство выбора даты пользовательского интерфейса Bootstrap. При «очистке» даты uib-datepicker-popup сбрасывает значение области действия для поля даты на неопределенное. Теперь я передаю объект ресурса области в Mongoose с вызовом HTTP PUT angular $resource, он не будет передавать нулевые свойства в объекте json. Мое поле даты просто отсутствует и не заполнено в объекте json и выводится. Поэтому исходная дата остается, и мне не удалось сбросить поле даты в документе MongoDB.

Как мне подойти к удалению определенного поля, как при отключении с Mongoose, встроенным в «findByIdAndUpdate»?


person MMFC    schedule 19.10.2017    source источник
comment
Вы просто по существу просите заменить соответствующий документ содержимым, которое вы отправляете, а не обновлять существующие поля и оставлять те, которых нет в документе, нетронутыми. т.е. хранится документ { a: 1, b: 2, c: 3 }, и вы отправляете { a: 2, b: 3 }, и это документ, который вы хотите сохранить. Не { a: 2, b: 3, c: 3 }, что вы сейчас получаете. Это оно?   -  person Neil Lunn    schedule 19.10.2017
comment
Вы не отвечаете, но я предполагаю, что из контекста вашего вопроса именно это вы и спрашиваете. У Mongoose есть опция "overwrite": true, которую можно установить для всех вариантов обновления. Все, что вам нужно, это указать объект для замены и включить перезапись в параметрах, как показано на дубликате.   -  person Neil Lunn    schedule 19.10.2017
comment
Я думаю, вы меня правильно поняли. Извините, если вопрос был не ясен. Я посмотрел на другой ответ, и он, кажется, решает мою проблему. Я просто должен попробовать, когда у меня есть шанс. Однако, не могли бы вы сообщить мне, есть ли какая-либо разница между опцией upsert и overwrite? Они оба, кажется, перезаписывают ответ, опубликованный в исходном / дублирующем вопросе.   -  person MMFC    schedule 19.10.2017
comment
Нет, они не делают то же самое, и другой ответ, опубликованный там, не мой, неверен. upsert — это совершенно другое, и я верю, Я четко объясняю, какова цель overwrite, хотя в основном он восстанавливает поведение по умолчанию того, что делает драйвер, из того, как мангуст изменяет его для удобства.   -  person Neil Lunn    schedule 20.10.2017
comment
Большое спасибо, Нил, добавьте параметр перезаписи, который теперь работает. Пойду решать свою проблему =)   -  person MMFC    schedule 22.10.2017