嗯,标题是自我解释的。但是,让我详细说明一下。 首先,我使用 Mongoid ,一个Gem,用于将MongoDB与rails应用程序一起使用。
#1)我有一个大集合,其中包含有关地图的信息。地图嵌入了很多图块,每个图块都引用了地形集合,用户集合以及其他一些信息。因此,如果我从地图中获取所有瓷砖,我将拥有一个非常大的结构。但是,我想缓存一个包含仅包含地形信息的矩阵的结构。为了做到这一点,我选择所有的瓷砖(因此,他们所有不需要的信息),并只使用地形领域。如何仅选择Mongoid上的地形场?我尝试使用select在几种方式上操作,但我没有设法做到这一点..(顺便说一句,只是为了举例说明,我使用“Map.first.tiles”行访问tiles数组)。
#2)嗯..我已经在这里,所以,为什么不问这个。我应该在模型上使用inverse_of字段吗?我没有在任何地方使用它,一切似乎都很完美。我不明白为什么需要它,因为确定将它们放在哪里以及它们的相反之处非常简单。
提前致谢。 费尔南多。
答案 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/