2013-06-20 77 views
4

我有一個具有許多動態屬性的記錄模型。我想向模型發出一個請求,將響應作爲JSON發送給客戶端。但我想在這個模型中排除像_id和所有foreign_keys字段。從mongoid文檔中排除字段?

我發現一個interssting答案如何排除某些鍵的值:How do I exclude fields from an embedded document in Mongoid?,但響應中的鍵仍然存在。

我:

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

而且without方法使:

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

但我想:

{ 
"name": "tom" 
} 

是否可以消除或排除某些鍵和值從結果?

回答

6

你不想從mongoid文檔中刪除字段,你想要做的就是從生成的json中刪除字段。 在您的控制器,爲to_json方法http://apidock.com/rails/ActiveRecord/Serialization/to_json

+0

對於生成的JSON這是正確的答案。如果mongoid實現了@Dominik提到的mongodb功能,那將會很好。 – Mindbreaker

+0

@Mindbreaker這個功能實際上是存在的,你在使用「without」時使用它,但是當它映射到你的ruby對象時,你的域仍然存在,並且默認返回nil。 – RedXVII

+0

'沒有'沒有做到MongoDB究竟做什麼。我期望一個沒有這個屬性的ruby對象。 – Mindbreaker

1

從MongoDB的資料爲準做

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

文檔:http://docs.mongodb.org/manual/reference/method/db.collection.find/

排除某些字段從結果集 以下示例選擇相匹配的文件選擇標準並從所得文件中排除一組字段:

db.products.find({ qty: { $gt: 25 } }, { _id: 0, qty: 0 }) 查詢返回所有從集合產品,其中數量大於25的結果集將包含除_id和數量領域的所有領域的文件的文件,如下所示:

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

我猜想mongoid將_id屬性設置爲nil,因爲mongoid模型具有一組定義的屬性(即使它們是動態的,_id,_type等被定義)。也許你可以用mongodb驅動程序嘗試它。

但我認爲RedXVII的答案是更實際的方式去