You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Mongoid查询拥有关联Device的Employee文档?

正确查询拥有关联Device的Employee的方法

针对你定义的Rails模型:

class Employee
  has_one :device
end

class Device
  belongs_to :employee
end

下面是几种正确的实现方式,按推荐度排序:

1. 使用内连接(推荐)

用joins做内连接是ActiveRecord中最直接高效的方式,内连接会自动筛选出拥有对应Device的Employee:

Employee.joins(:device)

这个写法会生成INNER JOIN "devices" ON "devices"."employee_id" = "employees"."id"的SQL,只返回有关联Device的员工记录。

2. 使用exists子查询

如果需要更明确的语义,也可以用exists语法:

Employee.where.exists(:device)

这会生成WHERE EXISTS (SELECT 1 FROM "devices" WHERE "devices"."employee_id" = "employees"."id")的SQL,性能和内连接相当,语义更清晰。

3. 你的第四种写法(可运行但不推荐)

你尝试的Employee.includes(:device).where("devices.id is not null")虽然能得到结果,但includes的核心作用是预加载关联避免N+1查询,用它来筛选属于误用,会额外加载所有关联的Device数据,造成不必要的性能开销,所以不推荐。

至于你前三种写法::'device'.exists => true、:'device.id'.ne => nil、:'device.device_uuid'.ne => nil,这些是MongoDB查询语法(比如Mongoid框架),并不适用于ActiveRecord(Rails默认的关系型数据库ORM),所以在你的场景下是无效的。

内容的提问来源于stack exchange,提问作者Mattix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:05