2017-04-26 102 views
0

所以我有一个AR模型,看起来像这样(所有字符串和日期属性):如何合并mongodb查询结果?

AR driver_id DRIVER_NAME driver_license paid_on(日期) ... helper_id HELPER_NAME helper_license paid_on_helper(日期)

我有这样的查询,以显示未付

def self.unpaid 
     result1 = AR.where(:paid_on => nil).in(:status => [AR::TRANSACTION_COMPLETE,AR::CANCELLED_BY_REQUESTER]).gt(:total_owed_to_driver => 0).asc(:assigned_driver_id).asc(:timestamp_requested) 
     result2 = AR.where(:paid_on_helper => nil, :assigned_driver2_id.ne => nil).in(:status => [AR::TRANSACTION_COMPLETE,AR::CANCELLED_BY_REQUESTER]).gt(:total_owed_to_driver => 0).asc(:assigned_driver2_id).asc(:timestamp_requested) 
     result1.to_a.concat(result2.to_a) 
     result1 
     end 

问题是,当我通过这种方式合并这两个时,我最终得到了一个像这样的数组。

Joe (main driver) 
    Joe (main driver) 
    Joe (main driver) 
    Bob (main driver) 
    Bob (main driver) 
    Larry (main driver) 
    Larry (main driver) 
    Larry (main driver) 
    Joe (2nd driver) 
    Joe (2nd driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Larry (2nd driver) 
    Larry (2nd driver) 

我需要的是一个像这样结束的数组。

Joe (main driver) 
    Joe (main driver) 
    Joe (main driver) 
    Joe (2nd driver) 
    Joe (2nd driver) 
    Bob (main driver) 
    Bob (main driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Bob (2nd driver) 
    Larry (main driver) 
    Larry (main driver) 
    Larry (main driver) 
    Larry (2nd driver) 
    Larry (2nd driver) 

我猜测它的排序结合二级或三级where子句?

回答

1

这可以使用单个mongo查询来完成吗?事情是这样的:

def self.unpaid 
    AR.or({ :paid_on => nil }, { :paid_on_helper => nil, :assigned_driver2_id.ne => nil }) 
    .in(:status => [AR::TRANSACTION_COMPLETE,AR::CANCELLED_BY_REQUESTER]) 
    .gt(:total_owed_to_driver => 0) 
    .asc(:assigned_driver_id) 
    .asc(:timestamp_requested) 
end 
+0

尝试这样做,在我的ERB显示时,只显示这PARAM下下降的项目(:paid_on_helper =>零,:assigned_driver2_id.ne =>无) – jdog

+1

尝试调用'。解释'在您的查询。这应该显示实际的mongo查询并可以帮助您进行调试。 – mikwat

+0

我做了,现在我的应用程序崩溃了。它会重新启动,然后不断崩溃。跆拳道? – jdog