Я новичок в MongoDb (и MongoDb C# Drivers), и в последнее время мы пытаемся реализовать обновление, в котором мы используем значение поля и переменную (параметр метода) для обновления нескольких полей.
По сути, наш do c выглядит примерно так:
publi c class Inventory {
publi c string _id;
publi c decimal Quantity;
publi c decimal TotalCost;
}
Что мы хотим сделать, так это обновить количество и totalCost на основе переданное значение (кол-во).
(1) TotalCost - = (qty * (TotalCost / Quantity))
(2) Quantity - = Qty
Logi c за этим стоит то, что мы хотим сохранить среднюю стоимость нашего товара. Обратите внимание: значение поля количества на шаге (1) должно использовать исходное значение, а не результат шага (2).
Мы можем реализовать это, используя 2 запроса, но в нашем случае нам нужно выполнить это logi c только за один вызов, так как есть разные потоки, которые обновляют один элемент.
Я читал документы об агрегировании и проекции (и использовании выражений), но я не могу понять, как использовать или объединить результат проекции в агрегированное обновление.
Пробовал эту проекцию, чтобы вернуть значение, которое должно быть вычтено из totalCost
Builders.Projection.Expression (e => ( e.totalCost / e.quantity) * -qty);
Спасибо и надеюсь, что вы, ребята, укажете нам правильное направление.
Вот что мы имеем пытается достичь в оболочке mon go при условии, что qty = 500.
db.inventory.updateOne ({_id: "1"}, [{"$ set": {"TotalCost" : {"$ add": ["$ TotalCost", {"$ multiply": [-500, {"$ div": ["$ TotalCost", "$ Quantity"]}]}]}}}])