У меня есть следующая схема mon goose:
var AccountSchema = new Schema({
amount: { type: Number, default: 0 },
createdAt : {type : Date, default : Date.now},
owner: {type : Schema.Types.ObjectId, ref : 'User'},
environment: {type : Schema.Types.ObjectId, ref : 'Environment'},
investments: [{
amount: { type: Number, default: 0 },
roi: { type: Number, default: 0 },
createdAt : {type : Date, default : Date.now},
code: {type : Schema.Types.ObjectId, ref : 'Code'}
}]
});
И я хочу выполнить операцию обновления для всех объектов, для которых задан c investment.code. Я хочу увеличить сумму счета в 2 раза, вложив средства.
Примерно так:
db.accounts.updateMany({'investments.code':ObjectId("5e7f2a3e20739d171884528f")},
{ $inc: { "amount": 'investments.$.amount' * 2 } }
);
В результате этого записи обновляются, но учетная запись равна NaN. Я попытался преобразовать все в целое число, выполнив это, но это не работает:
{ $convert: { input: "amount", to: "int" } }
Я хочу обновить поле суммы в документе root. Вот пример:
Представьте, что у меня есть эта учетная запись:
amount: 300,
createdAt : 12-01-2020,
owner: "5e7f2a3e20739d1718845256",
environment: "5e7f2a3e20739d1718845432",
investments: [{
amount: 40,
roi: 0,
createdAt : 12-01-2020,
code: "3"
},
{
amount: 10,
roi: 0,
createdAt : 13-01-2020,
code: "3"
}]
Я хочу посмотреть все вложения кода 3 и увеличить сумму на 300 с удвоением каждой сделанной инвестиции, в этом случае 40 * 2 и 10 * 2, результат будет 400 (300 + 80 + 20).
Как мне этого добиться?
Спасибо