揮発性のメモ2

知識をメモ書きしておく

MongoDBで、整数じゃない数値を探す

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 }