RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要啥 inverse_of ?
Posted
技术标签:
【中文标题】RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要啥 inverse_of ?【英文标题】:Mongoid on RoR3: 1) how to return specific field on query? 2) what inverse_of is needed for?RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要什么 inverse_of ? 【发布时间】:2011-10-04 23:22:51 【问题描述】:嗯,标题是不言自明的。但是,让我详细说明一下。 首先,我正在使用 Mongoid,这是一个用于在 Rails 应用程序中使用 MongoDB 的 Gem。
#1) 我有一个大集合,其中包含有关地图的信息。一张地图嵌入了很多瓦片,每个瓦片都引用了一个地形集合、一个用户集合,还有一些其他的信息。因此,如果我从地图中获取所有图块,我将拥有一个非常大的结构。但是,我想缓存一个包含仅包含地形信息的矩阵的结构。为了做到这一点,我选择了所有瓦片(以及所有不需要的信息)并仅使用地形字段。如何仅选择 Mongoid 上的地形字段?我尝试在几种方式上使用 select 进行操作,但我没有设法做到这一点..(顺便说一下,只是为了举例说明,我使用 "Map.first.tiles" 行访问了 tiles 数组。
#2) 好吧..我已经在这里了,所以,为什么不问这个。我真的应该在我的模型上使用 inverse_of 字段吗?我没有在任何地方使用它,而且一切似乎都运行良好。我不明白为什么需要它,因为确定将它们放在哪里以及它们的反面是什么非常简单。
提前致谢。 费尔南多。
【问题讨论】:
【参考方案1】:一般来说,在一个 mongoid 查询中只选择 1 个或多个属性:
Map.only(:name).all
我不会打扰 inverse_only 除非 Mongoid 需要帮助找出类。一般不需要。
如果您只需要返回嵌入文档的某些属性,则需要使用完整路径:
Map.first.tiles
=> [#<Tile _id: 4e1e486042f5bc06e7000002, name: "Earth", distance: 34>]
Map.only("tiles.name").first.tiles
=> [#<Tile _id: 4e1e488742f5bc06e7000003, name: "Earth", distance: nil>]
【讨论】:
感谢您的回答。关于#1,我使用了“Map.only(“tiles.row”).first.tiles,它返回了几个“#only
方法?我正在使用 3.0 版
我在这里是因为我记得前段时间使用only
,当时 mogoid 不是 mongodb 项目的一部分,现在我正在浏览文档,但我找不到任何提及它。知道为什么吗?它被删除了吗?已弃用?还有什么(新的)可以作为only
标准执行的吗?谢谢【参考方案2】:
你也可以使用pluck
标准#pluck
Band.all.pluck(:name)
获取所提供字段的所有值。未设置返回 nil 字段和不存在的字段。
来源:https://docs.mongodb.com/ecosystem/tutorial/mongoid-queries/
【讨论】:
以上是关于RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要啥 inverse_of ?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoid / MongoDB 中为 $within 查询选择单位