Ruby on rails 3 使用MongoID仅显示嵌入文档中的一个字段
我是MongoDB和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 %
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 %>