2013-04-09 81 views
0

我正在安裝MongoDB,正在研究使用大於散列參數,我得到一個錯誤。但是,當我使用一個hashrocket它的作品。爲什麼是這樣?函數返回的字符串

require 'rubygems' 
require 'mongo' 
require 'pry' 
require 'win32ole' 

db = Mongo::Connection.new.db("test") 
x = db['text'] 

y = x.find({a: {$gt: 0}}) 
y.each {|y| puts y } 

數據

{"_id"=>BSON::ObjectId('51630eea5a8d7b8a8be738c0'), "a"=>1.0} 
{"_id"=>BSON::ObjectId('51632de8583be71698000001'), "a"=>1} 
{"_id"=>BSON::ObjectId('51632de8583be71698000002'), "a"=>1, "b"=>2} 

的誤差

syntax error, unexpected ':', expecting tASSOC 

此線在$ GT:部分 Y = x.find({一個:{$ GT:0}} )

This while

y = x.find({'b' => {'$gt' => 0}}) 
y.each {|y| puts y } 

回答

2

我認爲$gt被解釋爲對全局變量$gt的引用,而不是符號:$gt。既然你不能在變量中使用殖民化的散列語法,它正確地期待一個hashrocket。查詢應與字符串和符號的工作:

y = x.find({'b' => {'$gt' => 0}}) 
y = x.find({'b' => {:$gt => 0}}) 
+0

有道理,謝謝。 – ebbflowgo 2013-04-09 12:59:46