mongoid'with'选项行为已更改为> 6.0

时间:2017-07-23 06:38:20

标签: ruby-on-rails ruby mongodb mongoid mongoid6

让我从我的用例开始。我有两个不同的mongoid数据库实例,每个地区都有相似的模型。 根据用户输入,代码从我的rails应用程序中的相应mongo实例获取结果。我不确定这样做的最佳方法是什么,但是我使用了Model.with方法并在mongoid.yml中配置了两个客户端。

使用mongoid< 5.0,这非常有效。但是,最近我升级到mongoid 6.2,Model.with现在接受了阻止,我的查询没有产生任何结果。

以下是示例代码。

我从下面更改了我的代码(mongoid< 5,工作正常)

results = SomeModel.with(client: "region1").where(name: 'John')

to(mongoid> = 6.2)

results = SomeModel.with(client: "region1") do |mymodel|
    mymodel.where(name: 'John')
end

使用新代码,结果为空。不确定我做错了什么。但是,如果只需要一条记录,下面的代码工作正常:

results = SomeModel.with(client: "region1") do |mymodel|
    mymodel.where(name: 'John').first
end

如果我的用例有任何其他想法,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我只使用过Mongoid 6,就在最近,但也许这会有所帮助。但是,它与多个客户案例无关。

嗯,#first实际上是在说,根据这个标准{name: 'john'}给我第一次出现。

当你拨打#where时不是这样,你只是声明了条件参数,但是在你要求实际数据之前不会执行实际查询吗?

我不是百分百肯定但是。

:001 > Book.where(name: "my book")
 => #<Mongoid::Criteria
  selector: {"name"=>"my book"}
  options:  {}
  class:    Book
  embedded: false>

 :002 > Book.where(name: "my book").first
 => #<Book _id: 5954ae90ASDF10fe7739cbe, name: "my book", code: "ASDF-1234-qwer-3456">
 :003 >

现在,如果您想要收集数据而不是标准本身,您可能想要调用该对象上的方法,例如#to_a#to_json#first,{{ 1}},使用#last迭代它们,甚至使用像#each这样的运算符。这将为您提供与您之前声明的条件相对应的数据。

这就是我的想法,因为当我从rails应用程序的控制器方法中抛出[0]并且结果呈现为JSON时,对#where的调用是隐含的。

也许尝试调用#as_json并获取完整的对象数组。