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

MongoError:ドキュメントの検証に失敗しました-floatとintの両方を同じフィールドに挿入する方法-これはdoubleとしてマークされていますか?

    2つの解決策が見つかりました:

    1。やや有線のアプローチ -私はmixed typesで終わるので 私のコラムで。一般に、複雑さが増すため、混合型は望ましくない場合があります。私の場合、混合型と見なされる理由はありません。

    基本的にシングルタイプの代わりに 、タイプのリストを使用できます そのように:

    bsonType: "double" vs bsonType: [ "double", "int" ]

    この機能はここに文書化されています: $ types

    myValidatorIs =
      { validator:
          { $jsonSchema :
              { bsonType: "object"
              , required: [ "price" ]
              , properties:
                  { price:
                      { bsonType: [ "double", "int" ]  // add "int" in this array here
                      , description: "must be a double/float and is required"
                      }
                  }
              }
          }
      , validationAction: "error"
      , validationLevel: "strict"
      };
    

    2。推奨されるアプローチ 、@lvrfの助けを借りてこれを見つけました

    const MongoType_Double = require('mongodb').Double;
    
    myValidatorIs =
      { validator:
          { $jsonSchema :
              { bsonType: "object"
              , required: [ "price" ]
              , properties:
                  { price:
                      { bsonType: "double"  // leave this as double
                      , description: "must be a double/float and is required"
                      }
                  }
              }
          }
      , validationAction: "error"
      , validationLevel: "strict"
      };
    
    // then use the MongoType_Double constructor like so: 
    
    db.collection("collection").insertOne({ price : MongoType_Double(4.0) }); // no errors..
    
    

    これは、timestampなどの他のすべてのタイプでも機能するはずです。 など:




    1. MongoDB:メッセージングアプリに最適なデザイン

    2. Dockerを使用するデバイスにMongoDBのスペースが残っていません

    3. Pythonを使用して複数のJSONファイルをMongoDBに挿入します

    4. 1つのMongoDBドキュメントの_idを更新するにはどうすればよいですか?