使用Java从MongoDB数组中选择不同的值

时间:2014-12-04 17:07:00

标签: java mongodb

我想从List字段中获取一个名为categories的唯一值列表。

我正在使用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开头(还尝试过其他一些只是为了确定),测试失败。

甚至可以这样做,如果有,你有指针吗?

由于

2 个答案:

答案 0 :(得分:1)

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

现在它就像一个where条件,

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

答案 1 :(得分:1)

  

测试失败,即使我知道有些类别以S开头(还尝试过其他一些只是为了确定)。

您需要使用regex字段上的$regex运算符执行categories匹配,以查找以特定distinct开头的input类别。< / p>

您的更新代码应如下所示:

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