昨夜すぐに書いたので、この回答を書き直しました。それ以来、実際には見ていません。
これは、 の ini 設定native_long
が on に設定されているためです。
この場合に使用される MongoDB データ型は、この設定がオフになっている場合に使用される BSON INT ではなく、BSON LONG です。
http://php.net/manual/en/mongo.configuration.php#ini.mongo.native-long
この背後にある理論的根拠は、64 ビット システムが 64 ビット INT を格納できるようにすることです。
Docページでアドバイスされているように:
このデフォルトの動作は 2.0.0 で TRUE に変更されるため、この変数を必要な値 (おそらく TRUE) に設定して、アップグレード時にドライバの動作が突然変化しないようにしてください。
そのため、すべてのドキュメントをアップグレードして、ドライバーのこの将来の機能と互換性があることを確認することをお勧めします。
だから答える:
コレクションを新しい形式に更新する簡単な方法はありますか?
いいえ、実際にはありません。すべてのドキュメントを確認し、適切なデータ タイプで再保存する必要があります。
あなたの懸念のいくつかについて:
特にインデックス作成と検索で問題が発生する可能性はありますか? 1 つの形式が優先されますか (NumberLong が優先されると思います)。
これは別のオブジェクトであるため、これらの数値による検索で問題が発生します。
ただし、このビットを処理するように PHP アプリケーションをセットアップすると、ドライバーは自動的に INT をデータベース内のそれぞれの表現に変換します。int
したがって、セットアップが完了すると、PHP 側では通常のオブジェクト タイプが表示されるだけなので、実際には余分な作業は発生しません。
インデックス作成に関しては、それほど影響しないはずです。値のみがインデックスに格納され、値はここで 2 つの間で同じです。
現時点でこの機能を使用して問題が発生した場合は、実際にこれをオンにする行をコメントアウトすることで、PHP.ini からいつでもオフにすることができます。