MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoError :Échec de la validation du document - Comment insérer à la fois float et int dans le même champ - qui est marqué comme double ?

2 solutions trouvées :

1. Une approche un peu filaire - parce que je me retrouve avec des mixed types dans ma colonne. En général, vous ne voudrez peut-être pas de types mixtes car cela ajoute de la complexité - et il n'y a aucune bonne raison pour qu'ils soient considérés comme mixtes dans mon cas.

En gros au lieu d'un type unique , vous pouvez utiliser une liste de types comme ceci :

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

Cette fonctionnalité est documentée ici :$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. L'approche recommandée , trouvé ceci avec l'aide de @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..

Cela devrait également fonctionner pour tous les autres types comme timestamp et tel :