MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Documents aléatoires de MongoDB utilisant des données de printemps

Mise à jour :

À partir de la v2.0 de Spring Data, vous pouvez faire ceci :

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

Réponse originale :

Les couches d'abstraction comme spring-mongo seront toujours à la traîne par rapport aux fonctionnalités publiées par le serveur. Il est donc préférable de construire vous-même la structure du document BSON pour l'étape du pipeline.

Implémenter dans une classe personnalisée :

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);
    }
}

Et puis utilisez dans votre code :

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

Puisque cela implémente AggregationOperation cela fonctionne bien avec les méthodes d'assistance d'opération de pipeline existantes. c'est-à-dire :

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")))
    )
);

Encore une fois, tout n'est qu'un objet BSON à la fin de la journée. Il s'agit simplement d'avoir un wrapper d'interface pour que les méthodes de classe de spring-mongo interprètent le résultat et obtiennent correctement votre objet BSON défini.