从mongoid中的文档中排除字段?

时间:2013-06-20 10:46:23

标签: ruby-on-rails mongodb mongoid

我有一个包含许多动态属性的Record模型。我想向模型发出请求,将响应作为JSON发送给客户端。但我想在此模型中排除_id和所有foreign_keys等字段。

我找到了一个有趣的答案,如何排除某些键的值:How do I exclude fields from an embedded document in Mongoid?,但响应中的键仍然存在。

我得到了:

{
 "_id": 1,
 "name": "tom"
}

without方法制作:

{
  "_id": nil,
 "name": "tom"
}

但我想:

{
 "name": "tom"
}

是否可以从结果中删除或排除某些键和值?

2 个答案:

答案 0 :(得分:6)

您不想从mongoid文档中删除字段,您要做的是从生成的json中删除字段。 在您的控制器中,执行

render :json => @model.to_json(:except => :_id)

to_json方法的文档http://apidock.com/rails/ActiveRecord/Serialization/to_json

答案 1 :(得分:1)

取自:http://docs.mongodb.org/manual/reference/method/db.collection.find/

的mongodb文档

从结果集中排除某些字段 以下示例选择与选择条件匹配的文档,并从结果文档中排除一组字段:

db.products.find( { qty: { $gt: 25 } }, { _id: 0, qty: 0 } ) 查询返回qty大于25的集合产品中的所有文档。结果集中的文档将包含除_id和qty字段之外的所有字段,如下所示:

{ "item" : "pencil", "type" : "no.2" }
{ "item" : "bottle", "type" : "blue" }
{ "item" : "paper" }

我认为mongoid将_id属性设置为nil,因为mongoid模型具有一组已定义的属性(即使它们是动态的,_id,_type等也是定义的)。也许你可以尝试使用mongodb驱动程序。

但我认为RedXVII答案是更实用的方法