Mongomapper(或更准确地说,Plucky,构建Mongomapper查询的库)铸造了一个名为的字段 id
至 _id
自动与ActivereCord均等,因此您不能使用两个称为的不同字段 _id
和 id
. 。您会看到,如果您查看日志中生成的查询。
在这种情况下,您需要使用其他字段名称。
题
我正在尝试在我的Sinatra应用程序中使用Mongomapper作为一个简单的拍卖网站,但是我很难运行一个简单的查询并获得任何结果。
before '/auction/:id' do
connection = Mongo::MongoClient.new
db = connection.db('auction')
collection = db['auctions']
@query = Plucky::Query.new(collection)
end
get '/auction/:id' do
@auction = @query.where({:id => params["id"].to_i})
"#{@auction.inspect}"
end
但是我没有输出 @auction.inspect
在浏览器中。但是,当我使用查询时 @auction = @query.all
我在数据库中获取所有记录。
参数(使用URL Localhost/Auction/3时):
{"splat"=>[], "captures"=>["3"], "id"=>"3"}
query.all
输出:
[{"_id"=>BSON::ObjectId('529cbbee21f7f10dd4000005'), "id"=>2, "name"=>"jump", "price"=>1.42}, {"_id"=>BSON::ObjectId('529cbbf821f7f10dd400000e'), "id"=>3, "name"=>"here", "price"=>93.34}]
解决方案
Mongomapper(或更准确地说,Plucky,构建Mongomapper查询的库)铸造了一个名为的字段 id
至 _id
自动与ActivereCord均等,因此您不能使用两个称为的不同字段 _id
和 id
. 。您会看到,如果您查看日志中生成的查询。
在这种情况下,您需要使用其他字段名称。
其他提示
.where
建立协会,但是您需要调用类似的方法 all
或者 first
执行查询并获得结果:
@auction = @query.where({:id => params["id"].to_i}).first