2015-08-28 3 views
0

Я хочу запустить отдельный запрос в mongo db с использованием java-интерфейса Spring Framework. Запрос выглядит примерно так:Отличительный запрос в Mongo с использованием шаблона доступа Java Mao

db.location.distinct("state"); 

Как создать объект запроса для вышеуказанного. Ниже приведена плохая попытка.

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; 
     */ 
} 

ответ

3

Там на самом деле не .distinct() метод непосредственно на MongoOperations, ни чего-либо, что на самом деле переводится на один, сохранить структуру агрегации.

Но вы можете просто захватить метод из базового объекта Collection непосредственно:

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

Где, конечно, нужно указать имя коллекции, как объект Collection от .getCollection() исходит из базового драйвера Java.

Или, если вы предпочитаете, вы можете запустить «команду» форму непосредственно, но вам все еще нужно назвать коллекцию:

BasicDBObject distinctCommand = new BasicDBObject("distinct", "location") 
      .append("key", "state"); 
List states = (List)mongoOperation.executeCommand(distinctCommand).get("values"); 
Смежные вопросы