Как выполнить «уменьшить и удалить, когда ноль» с MongoDB - PullRequest
0 голосов
/ 29 марта 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 29 марта 2011

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

0 голосов
/ 29 марта 2011

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

...