sql >> Database >  >> NoSQL >> MongoDB

Willekeurige documenten van MongoDB met spring-data

Bijwerken:

Vanaf v2.0 van Spring Data kun je dit doen:

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

Oorspronkelijke antwoord:

Abstractielagen zoals spring-mongo zullen altijd ver achterblijven bij door de server vrijgegeven functies. De BSON-documentstructuur voor de pijplijnfase kunt u dus het beste zelf samenstellen.

Implementeren in een aangepaste 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);
    }
}

En gebruik dan in je code:

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

Aangezien dit AggregationOperation implementeert dit werkt goed met de bestaande hulpmethoden voor pijplijnbewerkingen. dat wil zeggen:

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

Dus nogmaals, alles is uiteindelijk slechts een BSON-object. Het is gewoon een kwestie van een interface-wrapper hebben, zodat de klassenmethoden in spring-mongo het resultaat interpreteren en uw gedefinieerde BSON-object correct krijgen.



  1. Indexprefixcompressie in MongoDB 3.0 WiredTiger

  2. Redis-sleutelontwerp voor realtime voorraadtoepassing

  3. Begeleiden van de host, selderij van een virtualenv (Django-app)

  4. kan geen standaard mongo-shellscript maken met authenticatie