sql >> Base de Datos >  >> NoSQL >> MongoDB

Documentos aleatorios de MongoDB usando datos de primavera

Actualización:

A partir de la versión 2.0 de Spring Data, puede hacer esto:

SampleOperation matchStage = Aggregation.sample(5);
Aggregation aggregation = Aggregation.newAggregation(sampleStage);
AggregationResults<OutType> output = mongoTemplate.aggregate(aggregation, "collectionName", OutType.class);

Respuesta original:

Las capas de abstracción como spring-mongo siempre van a quedar muy rezagadas con respecto a las funciones lanzadas por el servidor. Por lo tanto, es mejor que construya usted mismo la estructura del documento BSON para la etapa de canalización.

Implementar en una clase personalizada:

public class CustomAggregationOperation implements AggregationOperation {
    private DBObject operation;

    public CustomAggregationOperation (DBObject operation) {
        this.operation = operation;
    }

    @Override
    public DBObject toDBObject(AggregationOperationContext context) {
        return context.getMappedObject(operation);
    }
}

Y luego usa en tu código:

Aggregation aggregation = newAggregation(
    new CutomAggregationOperation(
        new BasicDBObject(
            "$sample",
            new BasicDBObject( "size", 15 )
        )
    )
);

Dado que esto implementa AggregationOperation esto funciona bien con los métodos auxiliares de operación de tubería existentes. es decir:

Aggregation aggregation = newAggregation(
    // custom pipeline stage
    new CutomAggregationOperation(
        new BasicDBObject(
            "$sample",
            new BasicDBObject( "size", 15 )
        )
    ),
    // Standard match pipeline stage
    match(
        Criteria.where("myDate")
            .gte(new Date(new Long("949384052490")))
            .lte(new Date(new Long("1448257684431")))
    )
);

Entonces, nuevamente, todo es solo un Objeto BSON al final del día. Es solo una cuestión de tener un contenedor de interfaz para que los métodos de clase en spring-mongo interpreten el resultado y obtengan su objeto BSON definido correctamente.