2010-12-07 12 views
5

私は1000人のユーザーをTwitterから取得しています.1000個の挿入を個別に行うのではなく、1回に保存したいと思います。Mongoid:1回の呼び出しで多くのオブジェクトを作成する

モンゴイドでこれを行うにはどうすればよいですか?このようなものはロックされます:

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

「ワンショットで」なぜこのようにしなければならないのでしょうか? –

+0

これはユーザーが直面している機能です。ユーザーは私がこれをしている間待っているだろう;)私は十分なデータをキャッシュして、twitterの部分が十分速く動くようにすることができます。 –

答えて

7

これを行うには、Mongoのルビードライバを使用する必要があります。 insert methodに一連のハッシュを渡すと、一度に複数のドキュメントを作成できます(詳細はgoogle groups discussion)。モンゴイドは、ルビドライバへのアクセスを容易にします。

のコードは次のようになります。

​​
+0

これはこれにうまく答えます。ありがとうございました! –

+0

Cool。 Mongoのルビードライバは非常に涼しく、Mongoidはとても簡単にアクセスできます。 Rubyドライバと生のMongoDBクエリを使用するのを恐れないでください。 – bowsersenior

+0

はい、そのレベルのコンピテンシーを取得しようとしています。どんな新しい技術と同様に、開始時にかなりの手持ち資金が必要です –

0

だけで直接MongoidModel.createを使用します。

1

ほとんどの場合、createで、createManyではありません。 @bowserseniorが指摘するように、それはArray#Mapとそれを使用することをお勧めします、また

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

:あなたはこのようにそれを使用することができます

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

Mongoid#Persistenceドキュメントから:

Model.create

検証エラーが発生した場合にエラーを上げ、データベースに文書または複数の文書を挿入するデータベース

Model.create!

に文書または複数の文書を挿入します。

関連する問題