MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Losowe dokumenty z MongoDB przy użyciu spring-data

Aktualizacja:

Począwszy od wersji 2.0 Spring Data możesz to zrobić:

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

Oryginalna odpowiedź:

Warstwy abstrakcji, takie jak wiosna-mongo, zawsze pozostają w tyle za funkcjami udostępnianymi przez serwer. Najlepiej więc samodzielnie skonstruować strukturę dokumentu BSON dla etapu potoku.

Zaimplementuj w niestandardowej klasie:

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 następnie użyj w swoim kodzie:

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

Ponieważ implementuje to AggregationOperation działa to dobrze z istniejącymi metodami pomocniczymi operacji potoku. 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")))
    )
);

Więc znowu, wszystko jest po prostu obiektem BSON na koniec dnia. To tylko kwestia posiadania wrappera interfejsu, dzięki któremu metody klasy w spring-mongo zinterpretują wynik i poprawnie uzyskają zdefiniowany obiekt BSON.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaludnij + Agreguj w Mongoose

  2. Czy istnieje sposób na tworzenie mongodb takich jak ciągi _id bez mongodb?

  3. Kolba mongoengine łączy się przez uri

  4. Mutex z MongoDB

  5. Łączenie się ze zdalnym serwerem mongoDB