申し訳ありませんが、最初はあなたの質問を理解できなかったため、間違った答えを提供しました(これを指摘してくれたcababungaに感謝します)。これが正しいものです。
Mongoshellは、さまざまなデータ型をサポートしています 。そして、あなたがそれを入力するとき、それはあなたのデータ型を推測しようとします。したがって、大きな数を入力します: 138548488276343678 。 32ビット整数の最大値である2^31-1よりも大きいことに注意してください。したがって、それはフロートとして扱われ、フロートは正確に格納されないため、少し変更されます。これが、保存されている番号がほぼ同じであるが、少し異なる理由です(この差は8未満になります)。ただし、この数値を正確に格納し、mongoが64ビット整数(整数に適合する)をサポートする必要があります。
したがって、64ビット整数として保存することを指定する必要があります。 a> 。これは次の方法で実行できます。
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
この後、ドキュメントを取得できますdb.a.find()
そしてそれは正しいでしょう。多くのドライバーにも同様の問題があるため、64ビット整数として保存することを明示的に指定する必要があることに注意してください。
_id
を指定していない場合 作成しているドキュメントに対して、mongodbは_id
を作成します フィールド自体。 _id
についてもう少し読むことができます こちら
および
_id
として使用したい独自のフィールドがある場合 、id:138548488276343678
と書く代わりに _id : 138548488276343678
と書く必要があります 。
P.S.また、かなり大きな数を使用していることがわかったため、mongodbの整数は64ビット整数 (つまり、-2^63から2^63-1の間にあります)