mongo_mapper查询返回无结果,DB中的直接查询返回结果

时间:2013-10-08 04:06:51

标签: ruby-on-rails mongodb gem mongomapper

以下是设置:

的Gemfile:

gem 'mongo_mapper', '>= 0.13.0.beta1'
gem 'plucky', '>= 0.6.5'

控制器:

@job = Job.where(:admin_id => a.id)

Rails控制台输出(记录器):

@job is []

一个“a.id”值恰好是:

a.id is 51ddbd6b972791243d0000f1

直接查询Mongo:

db.jobs.find({ admin_id: "51ddbd6b972791243d0000f1" })

>>>Lots of stuff<<<

多少?

> db.jobs.find({ admin_id: "51ddbd6b972791243d0000f1" }).count()
202

那么 - 为什么这个查询在Mongo中直接完成时会返回结果,并在从控制器调用时返回一个空数组?

更具体地说 - 这是简单的循环:

@tech_d = []
    @tech.each do |a|
      Rails.logger.info("a.id is " + a.id)
      @job = Job.where(:admin_id => a.id)
      Rails.logger.info("@job is " + @job.to_a.to_s)

产生这样的东西:

a.id is 51ddbd6b972791243d0000f1
@job is []
a.id is 51f976f2811d830002000adc
@job is []

但正如我已经证明的那样 - 在Mongo中直接完成这个简单的查询会有结果。

**编辑 - 我已经尝试了mongo_mapper gem 0.12.0的GA版本,结果是相同的(降级为0.5.2匹配 - 没有变化)

2 个答案:

答案 0 :(得分:0)

您没有结果,因为在您使用它时它只会创建查询。

您需要通过附加.all

来“执行”它
@job = Job.where(:admin_id => a.id)

会回复你:

=> #<Plucky::Query admin_id: "51ddbd6b972791243d0000f1", transformer: #<Proc:0x00000003d5c2a0@/var/lib/gems/1.9.1/gems/mongo_mapper-0.12.0/lib/mongo_mapper/plugins/querying.rb:76 (lambda)>>

你应该这样做:

@job = Job.where(:admin_id => a.id).all

or simply

@job = Job.all(:admin_id => a.id)

请参阅此处的下一段:http://mongomapper.com/documentation/plugins/querying.html#criteria

  

Mongo对动态查询提供了丰富的支持。 MongoMapper使用Plucky   构造只在Mongo时检索数据的查询代理对象   需要。这允许查询由几个条件组成   在被评估之前。

答案 1 :(得分:0)

拍摄我的脸,答案结果是串起来......

a.id.to_s而不是查询中的a.id.

那真是太糟糕了。我可以使用Rails.logger.info(a.id)获取正确的输出 - 没有to_s方法 - 但我必须将它放到查询中...

耶稣那么明显它会伤害我。