Mongoose - Удалить свойство из SubDocument
У меня есть следующая схема и код Mongoose:
Схема:
{
...
inv: {
type: Object,
default: {}
},
...
}
Код (версия 1), где targetData
это мангуст Document
, item
это String
, а также amount
это Number
:
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) delete targetData.inv[item];
await targetData.save();
Код (версия 2):
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) targetData.inv[item] = undefined;
await targetData.save();
Проблема в том, что ни одна из этих попыток не удаляет targetData.inv[item]
из документа. Моя цель - убрать предмет, скажем "thing"
из поддокумента. Например:
До:
{
...
inv: {
thing: 5
},
...
}
После:
{
...
inv: {},
...
}
Примечание: когда amount
это число меньше 5
(в приведенном выше примере), код работает нормально. Если я удаляю все 5
, вот когда он не обновляется, он останется как 5
,
Примечание 2: я использую Mongoose 5.3.15
Как мне этого добиться?
РЕДАКТИРОВАТЬ: Похоже, это происходит только если inv
только 1 свойство. Имея что-то вроде inv: { thing: 5, anotherThing: 6 }
будет отлично работать с delete
ключевое слово.
2 ответа
Выяснил, что было не так. Все, что мне нужно было сделать, это вручную сказать Мангусту, что inv
был изменен, используя targetData.markModified("inv")
, Документы Это связано с тем, что SchemaType смешивается ( Object
)
Я знаю, что вы решили проблему, но у меня есть идея. Обычно в этой ситуации я хотел бы получить документ, пройти через объект, найти элемент, удалить его и снова сохранить документ. Это наивный способ, которым я занимаюсь.