Ruby mongo:无法使用原子操作增加整数字段

时间:2011-11-28 06:26:17

标签: ruby mongodb syntax

我无法在mongo DB中运行一个增量整数计数器的命令。该命令虽然在mongo shell中运行得很好。

所以这里是示例程序:

require 'rubygems'
require 'mongo'

# create sample mongo local DB
db = Mongo::Connection.new.db("dbtest")

# create sample mongo collection within DB
mytable = db.collection("tabletest")

# inserting some records into sample collection
mytable.insert({'name'=>'apple','mycnt'=>0})
mytable.insert({'name'=>'orange','mycnt'=>0})
mytable.insert({'name'=>'pear','mycnt'=>0})

######## following statement throws error
######syntax error, unexpected '}', expecting $end
mytable.update({"name": "apple"},{"$inc": {"mycnt": 1}})

在运行普通ruby程序(不是mongo shell)时,我不确定语法方面的最后一个语句有什么问题。任何帮助是极大的赞赏。 mongo shell中的类似命令工作正常,如下所示:

# db.tabletest.update({name: "apple"},{$inc: {mycnt: 1}})

1 个答案:

答案 0 :(得分:4)

新风格的JSONish Hash语法仅适用于符号作为键,您尝试将其与字符串一起使用。此外,$inc:将被视为全局变量$inc,后跟冒号,因此当您要使用:$inc符号作为键时,不能使用JSONish语法。请改用hashrocket语法:

mytable.update({:name => "apple"},{:$inc => {:mycnt => 1}})
mytable.update({'name' => "apple"},{'$inc' => {'mycnt' => 1}})