MongoMapper ALL与WHERE的区别?

时间:2013-09-15 23:33:09

标签: ruby-on-rails mongodb mongomapper

我在我的代码中偶然发现了这个:

当我在Rails中使用MongoMapper编写查询时:

@res =客户。其中({$ foo,$ bar})

然后我运行@ res.inspect - 我得到:

@res is #<MongoMapper::Plugins::Querying::DecoratedPluckyQuery merchant_id: "518b762e89651a0389000013", phone: "**********", transformer: #<Proc:0x007fde074078a0@/usr/local/rvm/gems/ruby-2.0.0-p247/gems/mongo_mapper-0.13.0.beta1/lib/mongo_mapper/plugins/querying.rb:66 (lambda)>>

Ergo - 我的变量是实际的查询字符串。

当我改变它时:

@res =客户。全部({$ foo,$ bar})

然后@ res.inspect - 我得到:

@res is [#<Customer _id: BSON::ObjectId('51a9806589651a05da000001'), account_id: "", admin_id: nil, city_id: "Kailua, Hawaii", company_id: "0", created_at: Sat, 11 May 2013 00:00:00 UTC +00:00, cust_notes: "", datecreated: 2013-01-06 00:00:00 UTC, datemodified: 2013-01-06 00:00:00 UTC, **REMOVED PRIVATE DATA HERE** type: "customer", updated_at: Sun, 15 Sep 2013 22:43:56 UTC +00:00, zip_code: *****>]

Ergo - 它实际上是查询的结果(这是我一直期待的)。

现在很奇怪,这里的具体区别是我没有做“respond_to do | format |”而且我没有在视图中访问@res - 我正在尝试查看它的结果仍然在控制器中以实现重定向目的。

因为我的应用程序中的绝对是其他地方我正在做同样的“Customer.where”或“Job.where”的东西,然后那个实例变量被抛到了视图中我我会做@ customer.name之类的事情,或者从数组中获取值。

为什么

1 个答案:

答案 0 :(得分:1)

我知道这已经有几个月了,但我想我会做出回应以防其他人因为同样的问题而遇到它。

WHERE返回Plucky :: Query而不是结果,因此您可以在执行实际查询之前向其添加额外的功能。

@johns = Customer.where(name: 'john').fields(:foo).limit(10).sort(:foo).all

在最终使用allfirsteach等执行查询之前,您还可以传递查询以对其执行其他WHERE过滤。

@johns_older_than_10 = filter_by_age(Customer.where(name: 'john')).all

def filter_by_age(query)
  query.where(age: { :$gt => 10 })
end

请注意,如果您使用all进行循环,则无需返回each