Estoy escribiendo una pequeña API REST con golang y controlador oficial de mongodb Estoy atascado con la validación de errores de mongodb.

Dejame explicar :

Mi esquema de validación (simplificado)

var jsonSchema = bson.M{
    "bsonType":             "object",
    "required":             []string{"lastname"},
    "additionalProperties": false,
    "properties": bson.M{
        "lastname": bson.M{
            "bsonType":    "string",
            "description": "must be a string and is required",
        },
    },
}

var validator = bson.M{
    "$jsonSchema": jsonSchema,
}

// Migrate create users collection with validation schema
func (r *Repo) Migrate() error {

    opts := options.CreateCollection().SetValidator(validator)

    if err := r.db.CreateCollection(r.ctx, "users", opts); err != nil {
        return err
    }

    return nil
}

Entonces, en mi esquema de validación, solicité el apellido del usuario y le di una descripción para manejar el error (lo entiendo de la documentación)

Pero con mi función de crear usuario:

// Create user to repo
func (r *Repo) Create(usr *User) {
    if r.err != nil {
        return
    }
    u := r.db.Collection("users")
    _, err := u.InsertOne(r.ctx, usr)
    if err != nil {
        we, ok := err.(mongo.WriteException)
        if ok {
            fmt.Println(we)

            for _, r := range we.WriteErrors {
                fmt.Println(r)
            }

        }
        r.err = fmt.Errorf("error occured during creating. got=%w", err)
        return
    }
}

Y mi estructura de usuario

// User structure representation
type User struct {
    ID        primitive.ObjectID `bson:"_id"`
    Lastname  string             `bson:"lastname"`
}

Mi cuerpo json de la solicitud http post

{
  "something": "xxxx"
}

Error esperado: algo como (ejemplo, lo que esperaba tener como error):

{
    "field": "lastname",
    "message": "must be a string and is required"
}

Obtuve de mi error: multiple write errors: [{write errors: [{Document failed validation}]}, {<nil>}]

Y de mi elenco de errores a WriteException: Document failed validation

Leí de la documentación description N/A string A string that describes the schema and has no effect. ¿Pero no tiene ningún efecto para validar o es solo como un comentario para que alguien lea el esquema?

Me gustaría tener mi descripción sobre mi error para mostrarlo en mi http resp. Tal vez me equivoque al manejarlo, ¡así que puedo reescribirlo!

Gracias por leerme y espero que alguien pueda ayudarme con eso :) Que tengas un buen día

2
Valensto 1 sep. 2020 a las 12:46

1 respuesta

La mejor respuesta

Actualmente (MongoDB v4.4) el servidor MongoDB no devuelve el motivo del error de validación del documento. Hay un problema abierto SERVER-20547 para realizar un seguimiento de este trabajo. No dude en ver o votar el boleto para recibir la actualización del progreso.

Debe implementar una validación de entrada a nivel de aplicación. Asegurarse de que las entradas estén en los tipos de datos correctos antes de la inserción de la base de datos.

1
Wan Bachtiar 23 sep. 2020 a las 05:06