让我从我的用例开始。我有两个不同的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
如果我的用例有任何其他想法,我将非常感激。
答案 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
并获取完整的对象数组。