私は1000人のユーザーをTwitterから取得しています.1000個の挿入を個別に行うのではなく、1回に保存したいと思います。Mongoid:1回の呼び出しで多くのオブジェクトを作成する
モンゴイドでこれを行うにはどうすればよいですか?このようなものはロックされます:
TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}])
私は1000人のユーザーをTwitterから取得しています.1000個の挿入を個別に行うのではなく、1回に保存したいと思います。Mongoid:1回の呼び出しで多くのオブジェクトを作成する
モンゴイドでこれを行うにはどうすればよいですか?このようなものはロックされます:
TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}])
これを行うには、Mongoのルビードライバを使用する必要があります。 insert
methodに一連のハッシュを渡すと、一度に複数のドキュメントを作成できます(詳細はgoogle groups discussion)。モンゴイドは、ルビドライバへのアクセスを容易にします。
のコードは次のようになります。
これはこれにうまく答えます。ありがとうございました! –
Cool。 Mongoのルビードライバは非常に涼しく、Mongoidはとても簡単にアクセスできます。 Rubyドライバと生のMongoDBクエリを使用するのを恐れないでください。 – bowsersenior
はい、そのレベルのコンピテンシーを取得しようとしています。どんな新しい技術と同様に、開始時にかなりの手持ち資金が必要です –
だけで直接MongoidModel.createを使用します。
ほとんどの場合、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
ドキュメントから:
検証エラーが発生した場合にエラーを上げ、データベースに文書または複数の文書を挿入するデータベース
に文書または複数の文書を挿入します。
「ワンショットで」なぜこのようにしなければならないのでしょうか? –
これはユーザーが直面している機能です。ユーザーは私がこれをしている間待っているだろう;)私は十分なデータをキャッシュして、twitterの部分が十分速く動くようにすることができます。 –