我想使用ruby和mongoDB以原子方式从堆栈中推出和拉出东西.
我可以通过以下代码示例原子地执行推送:
collection.update({"_id" => document["_id"]}, {"$push" => {field_name => value}})
pop的示例代码:
value = collection.update({"_id" => document["_id"]}, {"$pop" => {field_name => -1}})
不幸的是,上面返回的值不是从堆栈"弹出"的值.
它似乎是一个非常有用的功能/特性,我发现很难相信mongoDB是不可能的.
更新
为了那些寻找完整答案的人的利益,这里是(再次感谢Cameron):
result = collection.find_and_modify({:query => {"_id" => document["_id"]}, :update => {"$pop" => {field_name => -1}}}) return result[field_name][0]
Cameron.. 5
看起来你想要findandmodify
命令.此命令允许您以原子方式修改文档并返回已修改的文档.请注意,默认情况下,返回的文档是修改之前的版本.在这种情况下,这正是您想要的,因为您可以自己获取堆栈中的最后一项.
不幸的是我不知道Ruby驱动程序,但是文档应该指向正确的语法方向.
看起来你想要findandmodify
命令.此命令允许您以原子方式修改文档并返回已修改的文档.请注意,默认情况下,返回的文档是修改之前的版本.在这种情况下,这正是您想要的,因为您可以自己获取堆栈中的最后一项.
不幸的是我不知道Ruby驱动程序,但是文档应该指向正确的语法方向.