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 )

Я знаю, что вы решили проблему, но у меня есть идея. Обычно в этой ситуации я хотел бы получить документ, пройти через объект, найти элемент, удалить его и снова сохранить документ. Это наивный способ, которым я занимаюсь.

Другие вопросы по тегам