sql >> データベース >  >> NoSQL >> MongoDB

MongoDB番号フィールドは、入力した番号で挿入または更新されません

    申し訳ありませんが、最初はあなたの質問を理解できなかったため、間違った答えを提供しました(これを指摘してくれたcababungaに感謝します)。これが正しいものです。

    Mongoshellは、さまざまなデータ型をサポートしています 。そして、あなたがそれを入力するとき、それはあなたのデータ型を推測しようとします。したがって、大きな数を入力します: 138548488276343678 。 32ビット整数の最大値である2^31-1よりも大きいことに注意してください。したがって、それはフロートとして扱われ、フロートは正確に格納されないため、少し変更されます。これが、保存されている番号がほぼ同じであるが、少し異なる理由です(この差は8未満になります)。ただし、この数値を正確に格納し、mongoが64ビット整数(整数に適合する)をサポートする必要があります。

    したがって、64ビット整数 。これは次の方法で実行できます。

    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の間にあります)




    1. MongoDBからHBaseへの移行

    2. MongoDbドライバーを使用してnode.jsからrs.initiate()とrs.Add()を呼び出すことはできますか?

    3. postgresでmongodbobjectidからタイムスタンプを抽出する方法

    4. mongodbアグリゲートにフィールドを含める