MongoDB查询失败

时间:2013-12-03 14:34:19

标签: ruby mongodb sinatra mongomapper

我正在尝试在我的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}]

2 个答案:

答案 0 :(得分:1)

MongoMapper(或者更准确地说,Plucky,构建MongoMapper查询的库)会自动将id的字段强制转换为_id以与ActiveRecord进行奇偶校验,因此您不能使用两个名为{的字段_id {1}}和id。如果你在日志中查看生成的查询,你会看到。

在这种情况下,您需要使用其他字段名称。

答案 1 :(得分:0)

.where构建关联,但您需要调用allfirst之类的方法来执行查询并获得结果:

@auction = @query.where({:id => params["id"].to_i}).first