Mongoid: creating multiple objects with one call

I have 1000 users that I will extract from Twitter, and I would like to save them with one shot, and not do 1000 inserts separately.

How can I do this on Mongoid? Something like this will swing:

TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}] )
+5
source share
3 answers

To do this, use the Mongo ruby ​​driver. You can pass an array of hashes to a method insertto create several documents at once (more about this discussion of google groups ). Mongoid facilitates access to the ruby ​​driver.

The code looks something like this:

user_list = twitter_accounts.map do |account|
  # create a hash of all the fields to be stored in each document
  { 'name' => account.name, 
    'username' => account.username 
    # some other fields...
  }
end

Mongoid.master['twitter_users'].insert(user_list)
+7
source

, 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!

, , .

+1

Just use MongoidModel.create directly.

0
source

All Articles