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.

“MongoTemplate orden determinístico en consulta de actualización.”

Estoy usando MongoTemplate en mi escritor Spring Batch, y me gustaría utilizar el operador $addToSet para agregar mis elementos en un arreglo solo si aún no existen. Según la documentación de MongoDB, el $addToSet funciona solo si los campos están en el mismo orden.

Entonces, mi pregunta es: ¿MongoTemplate convierte siempre mi pojo en un documento Bson en el mismo orden?

Encontré este convertidor en el código de MongoTemplate (MappingMongoConverter), y para mí el bucle no es determinista:

private void writeProperties(Bson bson, MongoPersistentEntity<?> entity, PersistentPropertyAccessor<?> accessor,
        DocumentAccessor dbObjectAccessor, @Nullable MongoPersistentProperty idProperty) {

    // Escribir las propiedades
    for (MongoPersistentProperty prop : entity) {

        if (prop.equals(idProperty) || !prop.isWritable()) {
            continue;
        }
        if (prop.isAssociation()) {
            writeAssociation(prop.getRequiredAssociation(), accessor, dbObjectAccessor);
            continue;
        }

        Object value = accessor.getProperty(prop);

        if (value == null) {
            continue;
        }

        if (!conversions.isSimpleType(value.getClass())) {
            writePropertyInternal(value, dbObjectAccessor, prop);
        } else {
            writeSimpleInternal(value, bson, prop);
        }
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el fragmento de código proporcionado para la clase MappingMongoConverter en MongoTemplate, el bucle a través de las propiedades de la entidad no es determinista. Como resultado, no es seguro asumir que el orden de los campos en el documento Bson resultante será el mismo cada vez. Por lo tanto, no se puede garantizar que el operador $addToSet funcione correctamente si los campos no están en el mismo orden. Para asegurarse de que el operador $addToSet funcione como se espera, puede ser necesario construir manualmente el documento Bson con el orden deseado de los campos.

Comments are closed.