Как выполнить "уменьшить и удалить, когда ноль" с MongoDB

У меня есть тип документа в MongoDB (ErrorTypeOccurences), который просто имеет свойство Name и Count. Я увеличиваю / уменьшаю свойство Count каждый раз, когда регистрируется исключение (чтобы иметь возможность сообщать о типах ошибок приложения). Для выполнения обновлений я обнаружил, как выполнить upsert с модификатором $inc, и это здорово, но я изо всех сил пытаюсь найти чистый способ сделать операцию декремента, которая также удалит документ, если уменьшенное значение равно ноль (поскольку журналы ошибок такого типа больше не будут).

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

Могу ли я добиться этого с помощью стандартных операций или мне нужно написать функцию на стороне сервера?

Я использую C#/NoRM, так что примеры, использующие это, были бы потрясающими, но совсем не обязательными. Благодарю.

2 ответа

Решение

Вы должны выполнить две операции. А поскольку внутри MongoDB нет поддержки транзакций, вы не можете гарантировать, что операция в целом будет успешной. Дополнительные проверки на уровне приложения должны быть добавлены.

Насколько я знаю, вы не можете делать то, что вы спрашиваете из коробки. Вы действительно хотите выполнить два обновления. Это то, для чего может работать серверная функция. Вы можете сохранить функцию Javascript во многом как хранимую процедуру.

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