sql >> Databasteknik >  >> NoSQL >> MongoDB

Slumpmässiga dokument från MongoDB med hjälp av fjäderdata

Uppdatering:

Från och med v2.0 av Spring Data kan du göra detta:

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

Ursprungligt svar:

Abstraktionslager som spring-mongo kommer alltid att släpa långt efter serverutgivna funktioner. Så det är bäst att du bygger BSON-dokumentstrukturen för pipelinestadiet själv.

Implementera i en anpassad klass:

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

Och använd sedan i din kod:

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

Eftersom detta implementerar AggregationOperation detta fungerar bra med de befintliga hjälpmetoderna för 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å återigen, allt är bara ett BSON-objekt i slutet av dagen. Det gäller bara att ha ett gränssnitts-omslag så att klassmetoderna i spring-mongo tolkar resultatet och får ditt definierade BSON-objekt korrekt.



  1. finns det något sätt att få klientens IP i redis?

  2. Rails 4/Devise/MongoDB:Otillåtna parametrar med anpassade egenskaper och starka parametrar

  3. Mongo har ingen max()-funktion, hur går jag runt detta?

  4. Hur använder man sadd med flera element i Redis med Python API?