【问题标题】:Complex queries with MongoTemplate and Spring Data MongoDB使用 MongoTemplate 和 Spring Data MongoDB 进行复杂查询
【发布时间】:2017-03-28 02:09:01
【问题描述】:

我正在使用普通的 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);

现在,我想继续使用 SpringData mongoDb api。 谁能帮我用 MongoTemplate 和 MongoOperations 编写相同的查询?

【问题讨论】:

    标签: java mongodb mongodb-query spring-data-mongodb


    【解决方案1】:

    这是我从 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多