2011-12-05 20 views
0

我正在嘗試Ruby(我不太清楚)和Mongo(我是這麼做的)。我製作了一個帶有:accessed字段的Mongoid模型。我知道,在我蒙戈可以只運行類似:在Mongoid中使用集合級別的操作

data = db.collection.findAndModify({ 
    query: { ... }, 
    update: {$inc: {accessed: 1}} 
}) 

但是當我在Mongoid運行MyModel.collection.find_and_modify,我回來這似乎是一個哈希值。有沒有一種方法可以強制我的模型類的實例,或者在Mongoid中進行更好的支持查詢?

回答

1

默認find_and_modify返回的哈希值,檢查documentation

參數:

  • OPTS(井)(默認爲:{}) - 一組可自定義的選項

選項哈希(opts):

  • :查詢(哈希) - 默認:{} - 用於匹配 所需文檔的查詢選擇器文檔。
  • :update(Hash) - default:nil - 在匹配文檔上執行的更新操作。
  • :sort(Array,String,OrderedHash) - default:{} - 使用任何可用於Cursor#sort的排序選項爲查詢指定排序選項。如果查詢將匹配多個文檔,則排序順序很重要,因爲只有第一個匹配的文檔將被更新並返回。
  • :remove(布爾值) - 默認值:false - 如果爲true,則從集合中刪除返回的文檔。
  • :new(布爾值) - default:false - 如果爲true,則返回更新的文檔;否則,在更新之前返回文檔。

返回:

  • (哈希) - 匹配的文件。

但是你可以通過簡單的初始化模式通過將哈希值作爲參數

>> x = MyModel.collection.find_and_modify(:query => {...},:update => {...}) 
>> x.class 
>> BSON::OrderedHash 
>> obj = MyModel.new(x) 
>> obj.class 
>> MyModel 

哈希轉換到您的收藏對象,並且現在你可以轉換的對象上施加任何mongoid操作。它會完美地工作。

希望它可以幫助

+0

您好,我同時使用Mongoid和收藏級別的操作來操縱我的MongoDB,但我一些如何我無法創建,保存或使用mongoid活動記錄操作更新我的數據庫如Model.save,Model.update_attributes等。你能提出任何解決方案嗎? –