2014-03-06 78 views
2

我有哈希像這樣的數組:如何使用Mongoid執行批量更新而不先查找?

[ 
    { 
    id: 123, 
    color: 'red' 
    }, 
    { 
    id: 456, 
    color: 'green' 
    } 
] 

我知道如何在一個時間內獲取和更新一個:

params[:my_documents].each do |doc| 
    MyDocument.find(doc[:id]).update_attributes(color: doc[:color]) 
end 

...但我懷疑的表現不是很好。我想找到一種方法,可以直接將數據傳遞給Mongoid/MongoDB,這樣我就可以更新每個文檔,而無需查找和實例化每個文檔以更新幾個字段。

如何使用Mongoid執行批量更新而無需首先獲取它們?

+0

不,重點在於我知道所有需要更新的文檔的id,而且我需要更新多個文檔,所以我想找到一種方法來傳遞數據並使其作爲一個有效的方式執行事務而不是一次一個地讀取和更新一個文檔。 – Andrew

+0

這是不是有重複的原因?你似乎在說你已經知道你想插入的所有數據。 http://stackoverflow.com/questions/3772378/batch-insert-update-using-mongoid –

+0

其實它不是你談論更新 –

回答

1

mongo-ruby-driver版本1.10(gem'mongo','〜> 1.10.0')支持批量寫入操作。對於您的示例,可以將一批更新作爲一個請求提交,以便在與2.6 MongoDB服務器一起使用時顯着提高性能。

https://github.com/mongodb/mongo-ruby-driver/wiki/Bulk-Write-Operations

批量寫操作尚未Mongoid可用,但計劃在基於「蒙戈」 Ruby驅動程序的新版本,在將來的版本。

+2

它仍然不存在...我使用的是mongoid 5 – user1735921

相關問題