将 rails 查询转换为 mongoid 查询
Convert rails query to mongoid query
我有一个现有的 rails 查询,但它不适用于 mongoid 。我需要转换以便它与 mongoid 一起使用
这里是查询
scope :between, -> (sender_id,recipient_id) do
where("(conversations.sender_id = ? AND conversations.recipient_id =?) OR (conversations.sender_id = ? AND conversations.recipient_id =?)", sender_id,recipient_id, recipient_id, sender_id)
end
我是 mongoid 的新手,我试过但找不到合适的解决方案
Mongoid 3.4.2
Rails 5.0.1
ruby '2.3.0'
假设声明在对话模型中:
scope :between, -> (sender_id,recipient_id) do
any_of({sender_id: sender_id, recipient_id: recipient_id}, {sender_id: recipient_id, recipient_id: sender_id})
end
更新:
另一种使用 in
运算符的解决方案也将涵盖您的查询,但会包括 sender_id: sender_id, recipient_id: recipient_id
.
不需要的情况
scope :between, -> (sender_id, recipient_id) do
args = [sender_id, recipient_id]
where(:sender_id.in => args , :recipient_id.in => args)
end
我更喜欢第一个选项,但如果您确定每个模型的配对值都是唯一的,第二个选项也可以达到目的。
我有一个现有的 rails 查询,但它不适用于 mongoid 。我需要转换以便它与 mongoid 一起使用
这里是查询
scope :between, -> (sender_id,recipient_id) do
where("(conversations.sender_id = ? AND conversations.recipient_id =?) OR (conversations.sender_id = ? AND conversations.recipient_id =?)", sender_id,recipient_id, recipient_id, sender_id)
end
我是 mongoid 的新手,我试过但找不到合适的解决方案
Mongoid 3.4.2
Rails 5.0.1
ruby '2.3.0'
假设声明在对话模型中:
scope :between, -> (sender_id,recipient_id) do
any_of({sender_id: sender_id, recipient_id: recipient_id}, {sender_id: recipient_id, recipient_id: sender_id})
end
更新:
另一种使用 in
运算符的解决方案也将涵盖您的查询,但会包括 sender_id: sender_id, recipient_id: recipient_id
.
scope :between, -> (sender_id, recipient_id) do
args = [sender_id, recipient_id]
where(:sender_id.in => args , :recipient_id.in => args)
end
我更喜欢第一个选项,但如果您确定每个模型的配对值都是唯一的,第二个选项也可以达到目的。