Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao Inserir valor inteiro na coleção 'conta'

Criei a coleção Conta com a seguinte estrutura:

{
    name: 'conta',
    type: 'collection',
    options: {
      validator: {
        '$jsonSchema': {
          bsonType: 'object',
          required: [ 'agencia', 'numero', 'valor', 'cpf' ],
          properties: {
            agencia: {
              bsonType: 'string',
              description: 'Agência da Conta (Obrigatório)'
            },
            numero: {
              bsonType: 'string',
              description: 'Número da Conta (Obrigatório)',
              minLength: 4
            },
            valor: {
              bsonType: 'double',
              description: 'Montante Monetário Presente na Conta',
              minimum: 0
            },
            cpf: {
              bsonType: 'string',
              description: 'CPF: Identifica de que Cliente é essa Conta, (Obrigatório)'
            }
          }
        }
      },
      validationLevel: 'strict',
      validationAction: 'error'
      }

Ao tentar inserir um documento com o atributo Valor sendo um número inteiro está dando erro:

db.conta.insertOne({
    agencia: "0002",
    numero: "0123",
    valor: 4.0,
    cpf: "123456789100"
})

Erro:

Uncaught:
MongoServerError: Document failed validation
Additional information: {
  failingDocumentId: ObjectId("63f979941269512fef853434"),
  details: {
    operatorName: '$jsonSchema',
    schemaRulesNotSatisfied: [
      {
        operatorName: 'properties',
        propertiesNotSatisfied: [
          {
            propertyName: 'valor',
            description: 'Montante Monetário Presente na Conta',
            details: [ [Object] ]
          }
        ]
      }
    ]
  }
}

Eu estou usando o Visual Studio para editar meu código e rodando direto no terminal do MongoDb. Consegui inserir um documento com valor 4.2, por exemplo.

Alguém teve esse problema?

1 resposta
solução!

Olá, William, tudo bem?

Neste caso, o MongoDB esta desconsiderando o 0 a esquerda e considerando o valor passado como um inteiro. Para resolver este problema, você pode especificar no momento de inserir os valores, o tipo do campo, dessa forma:

   db.conta.insertOne({
    "agencia": "0002",
    "numero": "0123",
    "valor": Double("4.0"),
    "cpf": "123456789100"})

Espero ter ajudado, abraços e bons estudos!