sql >> Databáze >  >> NoSQL >> MongoDB

Náhodné dokumenty z MongoDB pomocí jarních dat

Aktualizace:

Počínaje verzí 2.0 Spring Data můžete provést toto:

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

Původní odpověď:

Abstrakce vrstvy jako spring-mongo budou vždy zaostávat za funkcemi vydanými na serveru. Strukturu dokumentu BSON pro fázi pipeline si tedy nejlépe vytvoříte sami.

Implementujte ve vlastní třídě:

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

A pak ve svém kódu použijte:

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

Protože to implementuje AggregationOperation to funguje dobře se stávajícími pomocnými metodami provozu potrubí. tj.:

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

Takže znovu, všechno je na konci dne jen objekt BSON. Jde jen o to mít obal rozhraní, aby metody třídy v spring-mongo interpretovaly výsledek a správně získaly vámi definovaný objekt BSON.



  1. Získejte odlišné hodnoty záznamů

  2. Proč MongoDB nemůže použít složený index, který je hodně podobný (ne přesný) dotazu?

  3. MongoDB $log

  4. Pochopení latence pomocí Redis-Cli