Java 使用MongoTemplate和Spring数据MongoDB进行复杂查询

Java 使用MongoTemplate和Spring数据MongoDB进行复杂查询,java,mongodb,mongodb-query,spring-data-mongodb,Java,Mongodb,Mongodb Query,Spring Data Mongodb,我使用的是普通mongodb api,即MongoClient、DB、DBCollection、AggregrationOutput和DBObejct等。我有以下查询,运行良好: MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("myDB"); DBCollection collection = db.getCollection("my_data"); List<DBObject

我使用的是普通mongodb api,即MongoClient、DB、DBCollection、AggregrationOutput和DBObejct等。我有以下查询,运行良好:

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);
MongoClient mongo=新的MongoClient(“localhost”,27017);
DB=mongo.getDB(“myDB”);
DBCollection=db.getCollection(“我的数据”);
列表管道=新的ArrayList();
DBObject match=newBasicDBObject($match),newBasicDBObject(“date”,sdf.format(new date()).append(“myName”,myName));
DBObject unwind=newbasicdbobject(“$unwind”,“$myDetails”);
DBObject match2=newbasicdbobject($match),newbasicdbobject(“myDetails.type”,“health”);
DBObject sort=newbasicdbobject($sort),newbasicdbobject(“myDetails.datetime”,-1));
DBObject limit=新的BasicDBObject(“$limit”,1);
管道。添加(匹配);
管道。添加(展开);
管道。添加(匹配2);
管道。添加(排序);
管道。添加(限制);
AggregationOutput输出=collection.aggregate(管道);
现在,我想继续讨论SpringData mongoDb api。
有人能帮我用MongoTemplate和MongoOperations编写相同的查询吗?

以下是我从MongoOperations聚合函数得到的答案:

    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());
ApplicationContext ctx=新的注释配置ApplicationContext(MongoConfig.class);
MongoOperations MongoOperations=(MongoOperations)ctx.getBean(“mongoTemplate”);
AggregationOperation match=Aggregation.match(标准,其中(“国家”)为(“印度”);
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=聚合限制(1);
聚合聚合=聚合.newAggregation(匹配、展开、匹配2、排序、限制);
System.out.println(“聚合=”+聚合);
AggregationResults输出=mongoOperation.aggregate(聚合,“gui_数据”,聚合FactoryResult.class);
System.out.println(“output=“+output.getMappedResults());