Как реализовать атомарный стек с mongoDB и Ruby - PullRequest
4 голосов
/ 16 октября 2010

Я хочу выдвигать и извлекать вещи из стека атомарным способом, используя ruby ​​и mongoDB.

Пуш, который я могу сделать атомарно через следующий пример кода:

collection.update({"_id" => document["_id"]}, {"$push" => {field_name => value}})

Пример кода для pop:

value = collection.update({"_id" => document["_id"]}, {"$pop" => {field_name => -1}})

К сожалению, возвращенное выше значение не является значением, которое было «вытолкнуто» из стека.

Кажется, что это очень полезная функция / функция, и мне трудно поверить, что это невозможно с mongoDB.

Обновление

Для тех, кто ищет полный ответ, вот оно (еще раз спасибо, Кэмерон):

result = collection.find_and_modify({:query => {"_id" => document["_id"]}, :update => {"$pop" => {field_name => -1}}})
return result[field_name][0]

1 Ответ

5 голосов
/ 16 октября 2010

Похоже, вы хотите команду findandmodify .Эта команда позволяет вам изменять документ атомарно и возвращать документ, который был изменен.Обратите внимание, что по умолчанию возвращаемым документом является версия до его изменения.В данном случае это именно то, что вам нужно, поскольку вы можете получить последний элемент в стеке самостоятельно.

К сожалению, я не знаю драйвер Ruby, но документация направьте вас в правильном направлении по синтаксису.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...