MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoError:Validierung des Dokuments fehlgeschlagen - Wie fügt man Float und Int in dasselbe Feld ein - das als doppelt markiert ist?

2 Lösungen gefunden:

1. Ein etwas verdrahteter Ansatz - weil ich am Ende bei mixed types lande in meiner Kolumne. Im Allgemeinen möchten Sie möglicherweise keine gemischten Typen, da dies die Komplexität erhöht - und es gibt keinen guten Grund, sie in meinem Fall als gemischt zu betrachten.

Im Grunde statt eines einzelnen Typs , können Sie eine Liste von Typen verwenden so:

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

Diese Funktion ist hier dokumentiert:$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. Die empfohlene Vorgehensweise , fand dies mit Hilfe von @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..

Dies sollte auch für alle anderen Typen wie timestamp funktionieren und so: