2016-12-22 16 views
0

長い整数の文書内のフィールドを更新しようとしました。しかし、 '14818435007969199'の代わりに '14818435007969200'の値に更新されました。長い番号がmongodbで正しく更新されていません

db.getCollection('title').updateMany({}, 
{$set:{'skillId':[NumberLong(14818435007969199)]}}) 

db.getCollection('title').find({}) 

{ 
    "_id" : ObjectId("5853351c0274072315da2426"), 
    "skillId" : [ 
     NumberLong(14818435007969200) 
    ] 
} 

解決策はありますか?私はrobomongo 0.9.0を使用しています。

答えて

1

mongoシェルは、すべての数値を浮動小数点値として扱います。だから、NumberLong()のラッパーを使用しているときに、長い値を文字列として渡すか、精度や変換のミスマッチのために損失する危険性があります。

これは期待どおりに動作するはずです。

db.getCollection('title').updateMany({}, 
{$set:{'skillId':[NumberLong("14818435007969199")]}}) 

例を示すだけです。バイナリベース2の値に14818435007969199を変換するとき

だから、ベース10に変換110100101001010100100111000010110001101111011110110000あなたはより多くの詳細については、floating point arithmeticをチェックアウトすることができます14818435007969200

で取得します。

関連する問題