mongoシェルの上から適当にinsertすると、デフォルトで数値はすべて double になる。なってしまう。
整数を入れたいときは NumberInt() を使う
db.hoge.insert( {a:1} ) /* 実数 */ db.hoge.insert( {a:NumberInt(2)} ) /* 整数 (32bit) */ db.hoge.insert( {a:NumberLong(3)} ) /* 整数 (64bit) */ db.hoge.insert( {a:4.0} ) /* 実数 */ db.hoge.insert( {a:5.1} ) /* 実数 */
このように入れた場合、mongoシェル上でのfind()の結果は次の通り:
> db.hoge.find() { "_id" : ObjectId("6011329ea6c1088a137f39e7"), "a" : 1 } { "_id" : ObjectId("601132a3a6c1088a137f39e8"), "a" : 2 } { "_id" : ObjectId("601132a6a6c1088a137f39e9"), "a" : NumberLong(3) } { "_id" : ObjectId("601132eca6c1088a137f39ea"), "a" : 4 } { "_id" : ObjectId("601132efa6c1088a137f39eb"), "a" : 5.1 }
整数と実数の区別がつかないので、なんかもう 型で検索して確認するしかない
> db.hoge.find({a: {$type:"int"}}) /* 整数 (32bit) を検索 */ { "_id" : ObjectId("601132a3a6c1088a137f39e8"), "a" : 2 } > db.hoge.find({a: {$type:"long"}}) /* 整数 (64bit) を検索 */ { "_id" : ObjectId("601132a6a6c1088a137f39e9"), "a" : NumberLong(3) } > db.hoge.find({a: {$type:"double"}}) /* 実数 を検索 */ { "_id" : ObjectId("6011329ea6c1088a137f39e7"), "a" : 1 } { "_id" : ObjectId("601132eca6c1088a137f39ea"), "a" : 4 } { "_id" : ObjectId("601132efa6c1088a137f39eb"), "a" : 5.1 }