使用Java Mao Access Pattern在Mongo中的独特查询

时间:2015-08-28 07:41:10

标签: java spring mongodb spring-mongo

我想使用spring框架java API在mongo db中运行一个不同的查询。查询是这样的:

db.location.distinct("state");

如何为上面的内容创建Query对象。下面是一个糟糕的尝试。

import org.springframework.data.mongodb.core.query.Query;

public List<Location> getLocations(int skipCount, int pageSize) 
{
        Query query = new Query(Criteria.where("state").is("distinct);
        return mongoOperations.find(query, Location.class);
        /*
         Don't want to do the below, as using Mao Pattern  --
         DBCollection collection = db.getCollection("location");
         DBObject o1 = new BasicDBObject();
         List list = collection.distinct("state", o1);
         return list;
       */
}

1 个答案:

答案 0 :(得分:3)

直接在MongoOperations上没有.distinct()方法,也没有任何真正转换为方法的方法,保存聚合框架。

但是你可以直接从底层的Collection对象中获取方法:

List states = mongoOperations.getCollection("location").distinct("state");

当然需要提供集合名称,因为来自.getCollection()的Collection对象来自底层Java驱动程序。

或者如果您愿意,可以直接运行“命令”表单,但仍需要命名该集合:

 BasicDBObject distinctCommand = new BasicDBObject("distinct", "location")
            .append("key", "state");
 List states = (List)mongoOperation.executeCommand(distinctCommand).get("values");