Ruby on rails 3 使用MongoID仅显示嵌入文档中的一个字段

Ruby on rails 3 使用MongoID仅显示嵌入文档中的一个字段,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails 3,Mongodb,Mongoid,我是MongoDB和MongoID的真正初学者。 我创造了两个脚手架 class Objet include Mongoid::Document field :nom, type: String embeds_one :coordonnee end 及 这就是我在创建新的对象时得到的结果: 现在,我试图只显示此文档的字段adrese1,但它不起作用。执行以下操作时,我只能显示整个嵌入文档: 当我这样做时: <%= @objet.coordonnees.adresse1 %

我是MongoDB和MongoID的真正初学者。 我创造了两个脚手架

class Objet
  include Mongoid::Document
  field :nom, type: String

  embeds_one :coordonnee
end

这就是我在创建新的
对象时得到的结果:

现在,我试图只显示此文档的字段
adrese1
,但它不起作用。执行以下操作时,我只能显示整个嵌入文档:

当我这样做时:

<%= @objet.coordonnees.adresse1 %>  

我得到这个错误:

undefined method `adresse1' for #<Hash:0x2b2b1f0>
未定义的方法“adresse1”#
我该怎么做

编辑

这样,我就可以显示所有元素“地址1、地址2、维尔、邮政编码”:

控制器
def秀
@objet=objet.find(参数[:id])
回应待办事项|格式|
format.html#show.html.erb
format.json{render json:@objet}
结束
结束
看法

但我的问题是:如何只显示其中一个?例如ville,或code_postal或Address1

对MongoID不太熟悉,但假设您可以直接调用mongo,那么有第二个隐式参数可以查找所有类似语句,称为
投影
,它指定了您想要返回的确切内容

例如,仅显示收藏中所有项目的
地址1

db.collection.find({},{"coordonnees.adresse1": 1, "_id":0})
应仅返回
adrese1
参数。我不能确切地告诉您在什么上下文中显示对象,但不管上下文如何,对mongo的api调用应该非常简单。如果我误解了这个问题,请告诉我

在您发布的示例中,您应该将find函数更改为如下内容:

Objet.find({params[:id]}, {:fields => [coordonnees.adresse1]})

希望对您有所帮助。

您的完整文档代码是什么?它是从你的帖子上掉下来的

在mongo Shell中,您可以使用点表示法
db.collection.find({},{'coordones.adresse1':1,''u id':0})
完成此操作,您需要指定
''u id':0
,因为默认情况下总是返回
'u id


另一个答案不起作用,因为
adrese1
是一个子文档。您必须包括对
合作伙伴的引用

我找到了问题的解决方案。 要仅显示哈希的一个元素,我可以执行以下操作:

<%= @objet.coordonnees['adresse1'] %>

我不确定您是使用
嵌入一个
还是
嵌入多个
,因为您在问题中交替使用关系名称的单数和复数形式

如果它是一个
embedded_one
,问题是您不应该迭代
@objet.coordonee
,因为它是一个单独的文档。您的视图代码应该如下所示:

<%= @objet.nom %>
<%= @objet.coordonnee.address1 %>

谢谢你对我的问题感兴趣。如何在show.html.erb中翻译这个
db.collection.find({},{“adresse1”:1})
?感谢您指出我有一点输入错误,但我更希望它作为一个注释而不是另一个答案中的一个戳…您的意思是collection.find,collectionfind不存在。建设性的批评哟。抱歉@SlaterTyranus,我更愿意对你的回答发表评论,但我没有足够的因果报应来这么做。你在我打字的时候发布了你的答案——如果我先看到的话,我会完全避开这个问题。啊,完全忘了那个推销员的事,混蛋。
<%= @objet.coordonnees['adresse1'] %>
<%= @objet.nom %>
<%= @objet.coordonnee.address1 %>
# model Objet
embeds_many :coordonnees

# view
<%= @objet.nom %>
<% @objet.coordonnees.each do |t|  %>  
  <%= t.address1 %>
<% end %>