如何使用mongoDB和Ruby实现原子堆栈

Mat*_*lor 4 ruby mongodb

我想使用ruby和mongoDB以原子方式从堆栈中推出和拉出东西.

我可以通过以下代码示例原子地执行推送:

collection.update({"_id" => document["_id"]}, {"$push" => {field_name => value}})
Run Code Online (Sandbox Code Playgroud)

pop的示例代码:

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

不幸的是,上面返回的值不是从堆栈"弹出"的值.

它似乎是一个非常有用的功能/特性,我发现很难相信mongoDB是不可能的.

更新

为了那些寻找完整答案的人的利益,这里是(再次感谢Cameron):

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

Cam*_*ron 5

看起来你想要findandmodify命令.此命令允许您以原子方式修改文档并返回已修改的文档.请注意,默认情况下,返回的文档是修改之前的版本.在这种情况下,这正是您想要的,因为您可以自己获取堆栈中的最后一项.

不幸的是我不知道Ruby驱动程序,但是文档应该指向正确的语法方向.