【问题标题】:How to merge mongodb query results?如何合并mongodb查询结果?
【发布时间】:2017-04-26 14:33:01
【问题描述】:

所以我有一个看起来像这样的 AR 模型(所有字符串和日期属性):

增强现实 driver_id 司机姓名 driver_license 付款时间(日期) ... 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 子句?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb


    【解决方案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
    

    【讨论】:

    • 试过了,在我的 erb 中显示时,它只显示了该参数下的项目 (:paid_on_helper => nil, :assigned_driver2_id.ne => nil)
    • 尝试在您的查询中调用.explain。这应该会显示实际的 mongo 查询,并且可以帮助您进行调试。
    • 我做到了,现在我的应用程序崩溃了。它将重新启动,然后不断崩溃。 wtf?
    • 仅在您的 Rails 控制台中使用 .explain,而不是您的应用程序代码。例如:bundle exec rails console
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多