2016-11-14 4 views
1

I Ebene mongodb api dh MongoClient, DB verwende, DBCollection, AggregrationOutput und DBObejct etc. Ich habe folgende Abfrage, die fein arbeitet:Komplexe Abfragen mit MongoTemplate und Spring Data MongoDB

MongoClient mongo = new MongoClient("localhost", 27017); 
DB db = mongo.getDB("myDB"); 
DBCollection collection = db.getCollection("my_data"); 
List<DBObject> pipeline=new ArrayList<DBObject>();    
DBObject match = new BasicDBObject("$match", new BasicDBObject("date", sdf.format(new Date())).append("myName", myName)); 
DBObject unwind = new BasicDBObject("$unwind", "$myDetails"); 
DBObject match2 = new BasicDBObject("$match", new BasicDBObject("myDetails.type", "health")); 
DBObject sort = new BasicDBObject("$sort", new BasicDBObject("myDetails.datetime", -1)); 
DBObject limit = new BasicDBObject("$limit", 1); 

pipeline.add(match); 
pipeline.add(unwind); 
pipeline.add(match2); 
pipeline.add(sort); 
pipeline.add(limit); 

AggregationOutput output = collection.aggregate(pipeline); 

Jetzt möchte ich Weiter zu SpringData mongoDb api. Kann mir jemand helfen, die gleiche Abfrage mit MongoTemplate und MongoOperations zu schreiben? Hier

Antwort

0

ist die Antwort, die ich von MongoOperations Aggregationsfunktion bekam:

ApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class); 
    MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate"); 

    AggregationOperation match = Aggregation.match(Criteria.where("country").is("India")); 
    AggregationOperation unwind = Aggregation.unwind("myDetails"); 
    AggregationOperation match2 = Aggregation.match(Criteria.where("myDetails.type").is("health")); 
    AggregationOperation sort = Aggregation.sort(Sort.Direction.ASC, "myDetails.datetime"); 
    AggregationOperation limit = Aggregation.limit(1); 

    Aggregation aggregation = Aggregation.newAggregation(match, unwind, match2, sort, limit); 
    System.out.println("Aggregation = "+aggregation); 
    AggregationResults<AggregateFactoryResult> output = mongoOperation.aggregate(aggregation, "gui_data", AggregateFactoryResult.class); 
    System.out.println("output = "+output.getMappedResults()); 
Verwandte Themen