MongoDB Perl モジュールのドキュメントには、64 ビット整数に関する情報がいくつかあります:
http://search.cpan.org/dist/MongoDB/lib/MongoDB/DataTypes.pod#64-bit_Platforms
整数サイズの違いは、使用している言語とドライバーによって異なります。Perl、PHP、Python などの動的型付け言語は、64 ビット用にコンパイルされた場合は 64 ビット整数を使用し、32 ビット用にコンパイルされた場合は 32 ビット整数を使用します。Java のような静的に型付けされた言語はより具体的かもしれませんが (Int は常に 32 ビットです)、C のような一部の言語では、int が少なくとも 16 ビットであること (および long は int よりも大きく、少なくとも 32 ビットであること) しか保証されません。 )。
シェル クエリに表示される NumberLong _ids は、64 ビット Perl (64 ビット整数を使用) を使用してデータを挿入しているため、予期されたものです。32 ビット整数は実際には NumberInt 形式ですが、シェルはこれらの型を明示的に表示しません。
インデックス作成とクエリが適用される限り、数値の _id は一意である必要があります。
たとえば、32 ビットと 64 ビットの両方に同じ整数 _id を挿入しようとすると、重複キー エラーが発生します。
MongoDB shell version: 2.0.6
> db.ints.insert({ _id: NumberInt(1) });
> db.ints.insert({ _id: NumberLong(1) });
E11000 duplicate key error index: testing.ints.$_id_ dup key: { : 1 }
同様に、数値の _id を照会すると、次のように一致します。
> db.ints.insert({ _id: NumberLong(2) });
> db.ints.find({_id:Number(2)});
{ "_id" : NumberLong(2) }
> db.ints.insert({ _id: NumberLong(3) });
> db.ints.find({_id:Number(3)});
{ "_id" : NumberLong(3) }
さまざまなドライバーや mongoimport などのコマンドを使用した場合の整数サイズの違いが気になる場合は、独自のインポート スクリプトを作成できます。mongoimport に相当するものは、 Text::CSV_XSを使用してすばやくまとめることができます。