es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al transformar el changeset recibido: Incompatibilidad de esquemas: La propiedad ‘X’ en la clase ‘Y’ es nula en un lado y no en el otro.

Obtengo el siguiente mensaje para ‘rate’. tanto en la clase Booking como en el esquema, no es un elemento ‘obligatorio’. pero aún así obtengo este error. por favor ayúdame.

¿Por qué es tan difícil para MongoDB decir en qué lado es nulo?

Error al transformar el conjunto de cambios recibidos: Desajuste de esquema: La propiedad ‘rate’ en la clase ‘Booking’ es nula en un lado y no en el otro.

A continuación se muestran las variables de mi clase Booking.

@PrimaryKey
private ObjectId _id = new ObjectId();
private String name = "Task";
private String mobile = "";
private String templocktime;

@Required
private String user_id = "My Project";
@Required
private String date = "30051986";
@Required
private String starttime = "0000";
@Required
private String duration = "60";
@Required
private String status = BookingStatus.Available.name();
private long bookingTime;
private int rate;

A continuación se muestra mi esquema.

{
    "title": "Booking",
    "bsonType": "object",
    "properties": {
        "_id": {
            "bsonType": "objectId"
        },
        "user_id": {
            "bsonType": "string"
        },
        "date": {
            "bsonType": "string"
        },
        "starttime": {
            "bsonType": "string"
        },
        "duration": {
            "bsonType": "string"
        },
        "status": {
            "bsonType": "string"
        },
        "name": {
            "bsonType": "string"
        },
        "mobile": {
            "bsonType": "string"
        },
        "templocktime": {
            "bsonType": "string"
        },
        "bookingTime": {
            "bsonType": "long"
        },
        "rate": {
            "bsonType": "int"
        }
    },
    "required": ["user_id", "date", "starttime", "duration", "status"]
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la propiedad ‘rate’ en la clase Booking es nullable en un lado y no en el otro. En este caso, significa que la propiedad ‘rate’ en el esquema está definida como un campo requerido, mientras que en la clase Booking no es requerida.

    MongoDB utiliza el esquema para validar los datos entrantes, y si hay una discrepancia entre el esquema y la clase, se producirá un error de validación. Si el esquema especifica que un campo es requerido, entonces los datos entrantes deben tener ese campo definido o de lo contrario se producirá un error de validación.

    Para resolver este problema, puedes hacer que la propiedad ‘rate’ sea requerida en la clase Booking o hacerla nullable en el esquema eliminándola del array ‘required’. Alternativamente, puedes definir un valor predeterminado para la propiedad ‘rate’ en la clase Booking para que nunca sea nulo.

    No es difícil para MongoDB determinar si un campo es nullable o no. Simplemente se fija si el campo está definido en el esquema y si está marcado como requerido. Si está marcado como requerido, entonces no es nullable, y si no está marcado como requerido, entonces es nullable. El mensaje de error indica que hay una discrepancia entre el esquema y la clase, pero una vez que se resuelva ese problema, MongoDB podrá determinar la nulabilidad del campo ‘rate’ sin problemas.

Comments are closed.