【问题标题】:mongoid 7.1 / mongo 4.0 eager loading is not workingmongoid 7.1 / mongo 4.0 急切加载不起作用
【发布时间】:2020-09-30 12:27:59
【问题描述】:

我有两个模型,案例和案例状态

class Case
    has_many :case_statuses, dependent: :destroy
    ...

class CaseStatus
    belongs_to :case, index: true, inverse_of: :case_statuses

在查询中使用 .includes 似乎对触发的 mongo 查询数量没有影响。

ids = [# 10 random ids]

# this fires 11 queries
Case.where(:id.in => ids).includes(:case_statuses).collect{|x| x.case_statuses.count}

# this also fires 11 queries
Case.where(:id.in => ids).collect{|x| x.case_statuses.count}

我做错了吗?我在阅读 Mongoid 7 文档时的预期是急切加载会导致 1 个查询。

感谢您的帮助, 凯文

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid eager-loading


    【解决方案1】:

    这里的问题是count触发了对数据库的查询,你可以使用size来避免这种行为。

    Case.where(:id.in => ids).includes(:case_statuses).collect{|x| x.case_statuses.size}
    

    另外,mongodb 不像 mosts sql db 那样支持查询关联,因此您不能使用这种方法将其缩小到只有 1 个查询,每个嵌套关联至少有 1 个查询。

    如果您使用aggregation pipeline,您始终可以获得单个查询

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多