sql >> Database teknologi >  >> NoSQL >> MongoDB

Tilfældige dokumenter fra MongoDB ved hjælp af spring-data

Opdatering:

Fra v2.0 af Spring Data kan du gøre dette:

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

Oprindeligt svar:

Abstraktionslag som spring-mongo vil altid halte langt bagefter serverfrigivne funktioner. Så det er bedst for dig selv at konstruere BSON-dokumentstrukturen til pipelinestadiet.

Implementer i en tilpasset klasse:

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

Og brug derefter i din kode:

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

Da dette implementerer AggregationOperation dette fungerer godt med de eksisterende hjælpemetoder til pipelinedrift. dvs.:

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

Så igen er alt bare et BSON-objekt i slutningen af ​​dagen. Det er bare et spørgsmål om at have en interface wrapper, så klassemetoderne i spring-mongo fortolker resultatet og får dit definerede BSON-objekt korrekt.



  1. ugyldig bytesekvens i US-ASCII (Ruby 1.9 + rails 2.3.8 + mongodb + mongo_mapper)

  2. Redis:Mislykket åbning af .rdb til lagring:Tilladelse nægtet

  3. Mongodb array $push og $pull

  4. StackExchange.Redis med Azure Redis er ubrugelig langsom eller kaster timeoutfejl