2010-12-07 52 views
5

我有1000個用戶,我將從Twitter中檢索,並且我想一次保存它們,而不是單獨進行1000次插入。Mongoid:通過一次調用創建多個對象

我怎樣才能在Mongoid上做到這一點?像這樣的東西會搖滾:

TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}]) 
+0

只是想知道,爲什麼你一定要這樣做「一槍」? – 2010-12-07 22:33:17

+0

這是一個面向用戶的功能。用戶會等待,而我這樣做;)我叮叮我可以緩存足夠的數據,以使twitter部分工作足夠快 – 2010-12-08 10:41:51

回答

7

你應該使用Mongo的紅寶石驅動程序來做到這一點。您可以將一組散列傳遞給insert method以一次創建多個文檔(有關此google groups discussion的更多信息)。 Mongoid使訪問Ruby驅動程序變得很容易。

的代碼會是這個樣子:

​​
0

只需直接使用MongoidModel.create。

1

你差點拿到了,這是create,而不是createMany。您可以使用它像這樣:

TwitterUser.create([ 
    { username: "u1", display_name: "Display Name 1" }, 
    { username: "u2", display_name: "Display Name 2" }, 
    { username: "u3", display_name: "Display Name 3" } 
]) 

此外,作爲@bowsersenior指出,這是一個好主意,用Array#Map使用它:

TwitterUser.create(
    @users_array.map do |u| 
     { username: u.username, display_name: u.name } 
    end 
) 

Mongoid#Persistence文檔:

Model.create

插入一個或多個文檔到數據庫

Model.create!

插入一個或多個文檔到數據庫中,如果發生驗證錯誤引發錯誤。

相關問題