sql >> Database >  >> NoSQL >> MongoDB

MongoError:Validatie van document mislukt - Hoe voeg ik zowel float als int in hetzelfde veld in - dat is gemarkeerd als dubbel?

2 oplossingen gevonden:

1. Een enigszins bedrade benadering - omdat ik eindig met mixed types in mijn rubriek. Over het algemeen wil je misschien geen gemengde typen, omdat dit de complexiteit vergroot - en er is in mijn geval geen goede reden om ze als gemengd te beschouwen.

Eigenlijk in plaats van een enkel type , kunt u een lijst met typen . gebruiken zoals zo:

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

Deze functie is hier gedocumenteerd:$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. De aanbevolen aanpak , vond dit met hulp van @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..

Dit zou ook moeten werken voor alle andere typen zoals timestamp en dergelijke:




  1. Sidekiq vindt geen records voor Rails Active Job

  2. MongoTemplate Criteria Query

  3. Hoe een uitzondering te voorkomen Voortijdig het einde van de stream bereikt met behulp van mongoDB Java-stuurprogramma 3.4+ of 3.6+? (tijdens het inbrengen)

  4. MongoDB - Geospatiale kruising van twee polygoon