2017-06-20 6 views
1

laravelを使用してドキュメントのインデックスを作成しようとするとエラーが発生します。MongoDB Driver Exception InvalidArgumentExceptionプラットフォーム上で整数オーバーフローが検出されました:300000000000

これは私のメインコードです。 die文を使用すると、私は最初の行を実行するとすぐに、このエラー "[MongoDB \ Driver \ Exception \ InvalidArgumentException]プラットフォームで整数オーバーフローが検出されました:300000000000"が表示されることに気づきました: $ users = User ::すべて();

私はhttps://github.com/jenssegers/laravel-mongodbを使ってLaravelとmongoDBを接続しています。 マイ・ユーザー・モデルは次のようになります

use Jenssegers\Mongodb\Eloquent\Model as Eloquent; 
class User extends Eloquent 
{ 
    protected $connection = 'mongodb'; 
    protected $collection = 'Test4'; 
} 

Test4には大きなデータが含まれています。しかし、私は整数オーバーフローエラーを引き起こすかもしれない私のマッピングに整数を持っていないことを確認しました。親切に私を助けてください。私はLaravelとMongoDBが新しくなっています 必要な情報があれば教えてください。

また、マッピングとインデックス作成でフィールド数を減らそうとすると、このエラーが発生します。 "PHP致命的なエラー:C:\ xampp \ htdocs \に134217728バイトが枯渇(40バイトを割り当てようとしました) ProTest1 \ vendor \ jenssegers \ mongodb \ src \ Jenssegers \ Mongodb \ Query \ Builder.php 392行 "

+2

"大きな"コレクションですか? 'User :: all()'はあなたがコンテンツを "すべて"求めていることを意味します。それは、「小さな」サイズを超えて何かをするのは賢明ではないでしょう。実際、['all()'](https://laravel.com/docs/5.4/collections#method-all)は、これが "カーソル"を "配列"に変えることを意味するようです。賢くなれ。 –

+1

bigdata型を整数に格納しようとしているようですので、この例外が発生しています –

+0

Neil Lunn、返信ありがとうございます。実際には、約7GBの容量を占める約75,000のドキュメントがデータに含まれています。 –

答えて

0

ありがとうNeil Lunn、あなたのフィードバックは本当に助けになりました。実際に私は大きなメモリを消費していたすべてのデータに同時にアクセスしていました。だから代わりに、私は一度に、以下のコードを使用して、データの断片を抽出しようとしました。

User::chunk(100, function ($users) { 
    foreach ($users as $user) { 
    $temp=$user['attributes']; 
    unset($temp['_id']); 
     $params = [ 
      'index' => 'test_index', 
      'type' => $temp['type'], 
      'id' => $temp['lid'], 
      'body' => $temp 
     ]; 
    $client = Elasticsearch::create()->build(); 
    $response = $client->index($params); 
    } 
}); 
関連する問題