2014-12-04 61 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); 

現在它會像一個where條件,

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

測試失敗,即使我知道有一些與S開頭的類別(也嘗試了很少有人確信)。

您需要使用的categories$regex運營商找到distinct類別與特定input開始執行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);