2014-12-04 3 views
1

카테고리라는 목록 필드에서 고유 한 값의 목록을 가져오고 싶습니다.Java를 사용하여 MongoDB 배열에서 고유 한 값을 선택하십시오.

Java 및 MongoDB를 사용하고 있습니다.

@Test 
public void testListCategories(){ 
    List<String> categories = Product.listCategories("S"); 
    Assert.assertTrue(categories.size() > 0); 
} 

테스트도 실패 그러나이 코드를 사용하여 테스트 할 때

public static List<String> listCategories(String input) { 

    Datastore ds = Dao.instance().getDatabase(); 
    BasicDBObject dbObject=new BasicDBObject("categories", input); 
    DBCollection dBCollection = ds.getCollection(Product.class); 
    List<String> categories = dBCollection.distinct("categories",dbObject); 

    return categories; 
} 

을 : 나는 것 볼 수있는 예제와 문서의 대부분은 내가 아래에 무엇을 같이 할 필요가 제안하는 나는 S로 시작하는 범주가 있음을 알고 있지만 (물론 확실한 몇 가지 다른 시도도했다).

포인터를 사용하는 경우에도이 작업을 수행 할 수 있습니까?

감사

이제

답변

1
BasicDBObject dbObject=new BasicDBObject(); 
dbObject.append(categories", input); 

이 조건이

DBCollection dBCollection = ds.getCollection(Product.class); 
List<String> categories = dBCollection.distinct("categories",dbObject); 
1

시험은 내가 S로 시작하는 범주가 알면서도 실패 어디처럼 될 것입니다은 (또한 시도 가지고 몇 가지 다른 것들이 있습니다).

당신은 특정 input 시작 distinct 범주를 찾기 위해 categories 필드에 $regex 연산자를 사용하여 regex 일치를 수행해야합니다.

BasicDBObject like = new BasicDBObject("$regex", 
         java.util.regex.Pattern.compile("^"+input, 
                 Pattern.CASE_INSENSITIVE)); 
BasicDBObject query = new BasicDBObject("categories", like); 
List<String> categories = dBCollection.distinct("categories",query); 
:

업데이트 된 코드가 같아야합니다

관련 문제