Ruby Mongo: невозможно увеличить целочисленное поле с помощью атомарных операций - PullRequest
0 голосов
/ 28 ноября 2011

Я не могу выполнить команду увеличения счетчика целых чисел в БД mongo. Хотя команда отлично работает в оболочке Монго.

Так вот пример программы:

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). Любая помощь очень ценится. Аналогичная команда в оболочке mongo работает нормально, которая выглядит следующим образом:

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

1 Ответ

4 голосов
/ 28 ноября 2011

Новый стиль JSONish Hash синтаксиса работает только с символами в качестве ключей, вы пытаетесь использовать его со строками.Кроме того, $inc: будет рассматриваться как глобальная переменная $inc, за которой следует двоеточие, поэтому вы не можете использовать синтаксис JSONish, если хотите использовать символ :$inc в качестве ключа.Вместо этого используйте синтаксис hashrocket:

mytable.update({:name => "apple"},{:$inc => {:mycnt => 1}})
mytable.update({'name' => "apple"},{'$inc' => {'mycnt' => 1}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...