sql >> Databáze >  >> NoSQL >> MongoDB

MongoError:Ověření dokumentu selhalo - Jak vložit float i int do stejného pole - které je označeno jako double?

Nalezena 2 řešení:

1. Poněkud drátový přístup - protože končím u mixed types v mém sloupci. Obecně platí, že smíšené typy možná nebudete chtít, protože to zvyšuje složitost – a neexistuje žádný dobrý důvod, aby byly v mém případě považovány za smíšené.

V podstatě místo jednoho typu , můžete použít seznam typů takhle:

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

Tato funkce je zdokumentována zde:$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. Doporučený postup , našel to s pomocí od @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..

To by také mělo fungovat pro všechny ostatní typy, jako je timestamp a podobně:




  1. Jak mohu vytvořit nová pole z existujícího řetězce pomocí $Project?

  2. Hromadná operace MongoDb získat id

  3. Jak odstranit sloupec z podřízené kolekce

  4. Škálovatelné úložiště souborů