如何在Rails的Only查询中包含嵌入式Document文档?
解决方案:在Mongoid 3中查询包含嵌入文档的指定字段
嘿,针对你遇到的这个Mongoid查询问题,我来给你详细说下怎么解决~
你原来的代码用only方法限制了Claim模型返回的顶级字段,但因为Document是嵌入在Claim里的(embeds_many :documents),它本质上是Claim文档的一个数组字段,所以只要把这个嵌入字段的名称加到only的参数列表里,就能把关联的Document数据一起查出来了。
修改后的代码如下:
@claims = @claims.only(:nice_id, :brand_id, :status, :documents).desc(:_id)
额外优化:只获取嵌入文档的部分字段
如果不需要每个Document的所有字段,Mongoid 3还支持嵌套的字段选择,这样能进一步减少查询返回的数据量。比如你只需要Document的name和file_url字段,可以这么写:
@claims = @claims.only(:nice_id, :brand_id, :status, 'documents.name', 'documents.file_url').desc(:_id)
原理很简单:Mongoid的only方法可以接受顶级字段名,也可以通过点语法指定嵌入文档的特定字段,这样MongoDB只会返回你指定的这些字段,既满足列表展示需求,又能拿到需要的嵌入文档数据。
内容的提问来源于stack exchange,提问作者Anand Jose
相关产品推荐
相关产品推荐

