2016-06-30 1 views
1

以下のクエリを使用して、FORループを使用してデータをコレクションにバルク挿入しています。ループを10000回反復すると、主に5k & 8kの間の繰り返しの後に失敗します。コード上の理想的mongodbのFORループでの問題

db.OneCo.drop() 
var bulk = db.OneCo.initializeOrderedBulkOp(); 
var p = 0.1, q = 0.6 
    for (i = 1; i < 10000; i++) { 
     bulk.insert({ 
      _id : i + p, 
      Act : NumberInt(i), 
      sqr : (i + p) * (i + p), 
      M2 : (i + p) * 2, 
      M3 : (i + p) * 3 
     }); 
     bulk.insert({ 
      _id : i + q, 
      Act : NumberInt(i), 
      sqr : (i + q) * (i + q), 
      M2 : (i + q) * 2, 
      M3 : (i + q) * 3 
     }); 
    } 
    bulk.execute(); 
print(i) 

、コレクションに19998のドキュメントを挿入する必要があり、しかし、私は誰かが間違っているものを助けることができ、ほとんどどこかに11000 間、ドキュメントの不規則なカウントが、私はコードを実行するたびに挿入見ますコードは?

+1

何らかの理由で障害が発生しましたか? – profesor79

+0

実際にはエラーで失敗していません。コードの実行は成功しましたが、コレクションに挿入されているドキュメントがすべて表示されませんでした。 –

+0

小バルクを作成しようとしましたか? 1000の範囲のような?また、1000個のアイテムで20個のバルクを作成した場合は、1つずつ待っていますか? – libik

答えて

0

私のコードを関数に入れて、すべてのドキュメントを処理した関数を実行しました。 ダイレクトクエリの問題点は不明です。
私はそれがコレクション内のドキュメントを挿入するためにループを開始するRoboMongoインターフェイスの問題だと思うが、Robomongoはループが内部的に開かれ、ドキュメントが正しく挿入されるmongoDBにコマンドを送る。

しかし、これは私の問題を解決しましたので、2〜3日後に回答があります。もし誰かがこれについて完璧な理由を見つけることができれば、私はうれしいでしょう。

0

は、あなたのコードでいくつかの論理的な問題のようです。

は私のすべての結果が

は私のすべての結果を取るARRAY1するPを+取り、以下やってみてくださいは、両方の配列を結合し、重複を削除

をARRAY2するQを+。

あなたは最終的に9330要素のみを取得します。