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.

Devolver resultado cuando el conteo esté por debajo del valor dado en Spring MongoDB.

Soy un traductor de español que traduce documentos de tecnología de la información. Traduzca lo siguiente al español. No traduzca el código ni la salida en markdown.

Soy relativamente nuevo en mongodb y spring data.

Estoy buscando una manera de realizar la operación a continuación de manera segura para subprocesos. En la implementación a continuación, es posible que el conjunto de resultados supere los 1000 después de que se ejecute la instrucción if y justo antes de que se consulte el resultado.

¿Cómo realizo esa operación atómicamente?

if (mongoTemplate.count(myQuery, Document.class) > 1000) {
throw new ResultSetTooLargeException()
}

return mongoTemplate.find(myQuery, Document::class.java)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el método findOneAndUpdate para realizar la operación atómicamente. Este método buscará un solo documento y lo actualizará en función de los parámetros especificados. Puede utilizar el operador $expr para comprobar si el recuento de los documentos es mayor que 1000 y generar una excepción si lo es.

    Por ejemplo:

    mongoTemplate.findOneAndUpdate(miConsulta, 
        new Update().combine(
            new Update().set("generarExcepcion", 
                new Document("$expr", 
                    new Document("$gt", 
                        Arrays.asList(mongoTemplate.count(miConsulta, Document.class), 1000)
                    )
                )
            )
        ), 
        Document.class
    );
    

    Si el recuento de los documentos es mayor que 1000, el campo generarExcepcion se establecerá en true. Luego puede comprobar este campo y generar la excepción si está establecido en true.

    También puede utilizar el método findAndModify para realizar la misma operación.

    Por ejemplo:

    mongoTemplate.findAndModify(miConsulta, 
        new FindAndModifyOptions().upsert(true).returnNew(true), 
        new Update().combine(
            new Update().set("generarExcepcion", 
                new Document("$expr", 
                    new Document("$gt", 
                        Arrays.asList(mongoTemplate.count(miConsulta, Document.class), 1000)
                    )
                )
            )
        ), 
        Document.class
    );
    

    Si el recuento de los documentos es mayor que 1000, el campo generarExcepcion se establecerá en true. Luego puede comprobar este campo y generar la excepción si está establecido en true.

Comments are closed.