2014-12-04 5 views
1

Я хочу получить список уникальных значений из поля List, называемого категориями.Выберите различные значения из массива MongoDB, используя Java

Я использую Java и MongoDB. Большинство примеров и документации я могу видеть, кажется, предположить, что мне нужно сделать что-то вроде того, что у меня есть ниже:

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

Однако, когда я проверить его с помощью этого кода:

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

тест не удается даже хотя я знаю, что есть категории, которые начинаются с 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 (также попробовал немногие другие, чтобы быть уверенными).

Вы должны выполнить regex матч с помощью оператора $regex на categories поле, чтобы найти distinct категории, которые начинаются с определенной input.

Ваш обновленный код должен выглядеть следующим образом:

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);