在RoR3上的Mongoid:1)如何在查询中返回特定字段? 2)需要什么inverse_of?

时间:2011-07-14 01:22:48

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

嗯,标题是自我解释的。但是,让我详细说明一下。 首先,我使用 Mongoid ,一个Gem,用于将MongoDB与rails应用程序一起使用。

#1)我有一个大集合,其中包含有关地图的信息。地图嵌入了很多图块,每个图块都引用了地形集合,用户集合以及其他一些信息。因此,如果我从地图中获取所有瓷砖,我将拥有一个非常大的结构。但是,我想缓存一个包含仅包含地形信息的矩阵的结构。为了做到这一点,我选择所有的瓷砖(因此,他们所有不需要的信息),并只使用地形领域。如何仅选择Mongoid上的地形场?我尝试使用select在几种方式上操作,但我没有设法做到这一点..(顺便说一句,只是为了举例说明,我使用“Map.first.tiles”行访问tiles数组)。

#2)嗯..我已经在这里,所以,为什么不问这个。我应该在模型上使用inverse_of字段吗?我没有在任何地方使用它,一切似乎都很完美。我不明白为什么需要它,因为确定将它们放在哪里以及它们的相反之处非常简单。

提前致谢。 费尔南多。

2 个答案:

答案 0 :(得分:35)

通常,只在mongoid查询中选择1个或多个属性:

Map.only(:name).all

除非Mongoid需要帮助搞清楚这些课程,否则我不会厌恶使用inverse_only。一般来说,不需要。

如果您只需要在嵌入文档中返回某些属性,那么您将需要使用完整路径:

Map.first.tiles
 => [#<Tile _id: 4e1e486042f5bc06e7000002, name: "Earth", distance: 34>]

Map.only("tiles.name").first.tiles
 => [#<Tile _id: 4e1e488742f5bc06e7000003, name: "Earth", distance: nil>]

答案 1 :(得分:2)

您也可以使用pluck

  

标准#摘去

     

Band.all.pluck(:name)

     

获取所提供字段的所有值。未设置返回nil   字段和不存在的字段。

来源:https://docs.mongodb.com/ecosystem/tutorial/mongoid-queries/