MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoError:Falha na validação do documento - Como inserir float e int no mesmo campo - que está marcado como duplo?


Encontrei 2 soluções:

1. Uma abordagem um pouco com fio - porque eu acabo com mixed types na minha coluna. Em geral, você pode não querer tipos mistos, pois adiciona complexidade - e não há uma boa razão para eles serem considerados mistos no meu caso.

Basicamente, em vez de um tipo único , você pode usar uma lista de tipos igual a:

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

Esse recurso está documentado aqui:$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. A abordagem recomendada , encontrei isso com a ajuda 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..


Isso também deve funcionar para todos os outros tipos, como timestamp e tal: