У меня есть следующие схема и код Mongoose:
Схема:
{
...
inv: {
type: Object,
default: {}
},
...
}
Код (версия 1), где targetData
- это Mongoose 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
Howя могу достичь этого?
РЕДАКТИРОВАТЬ: Похоже, это происходит только в том случае, если inv
имеет только 1 свойство.Наличие что-то вроде inv: { thing: 5, anotherThing: 6 }
будет отлично работать с ключевым словом delete
.