java,Morphia如何在使用Morphia Find Methods时比较字符串

时间:2011-09-23 18:55:40

标签: java morphia

我是新手,所以这里 试图从MongoDb获得一个名为“Bob”的用户。

我有:

UserData ud = MonConMan.instance().getDb().find(UserData.class, "name","bob").get();

如果首都有“Bob”,则无法找到“bob” 我知道我可以获得List并且equalsIgnoreCase但是为了 有一些我可以使用的运营商?

我有用户登录,必须进行测试以查看他们是否已注册。用户可以随意键入他的名字,因此必须找到equalsIgnoreCase的方法。是的,这是一个问题,我不能得到所有的名字,并做equalsIgnoreCase,如果有像10,000。当然,最初可以用小写字母保存所有用户名,但这会破坏名称的视觉外观。

看着维基但看不到任何......

http://code.google.com/p/morphia/wiki/Query

3 个答案:

答案 0 :(得分:2)

使用java regex,就像这样。

String name = "bob";
Pattern pattern = Pattern.compile("^" + bob + "$", Pattern.CASE_INSENSITIVE);//This line will create a pattern to match words starts with "b", ends with "b" and its case insensitive too.

Query<UserData> query = createQuery().field("name").equal(pattern).retrievedFields(true, "id");//Replace `id` with what ever name you use in UserData for '_id'
UserData user = query.get();
if(user!=null){
  //he is already registered
}
else{
//He is  a new guy

}

(I am not good at regex, so you may have read about $ & ^ somewhere. )

您应该确保用于验证新用户的用户名在整个系统中应该是唯一的。

答案 1 :(得分:1)

您可以使用以下代码查找UserData的名称:

Query<UserData> query = createQuery().filter("name","bob");
find(query);

在我的应用程序中,此代码返回具有“bob”值的字段UserData的所有name。 代码也可以这样:

Query<UserData> query = createQuery().field("name").equal("bob");
find(query);

这些代码位于扩展UserDataDao的{​​{1}}中,并在construtor中接收来自morphia的数据存储区。

答案 2 :(得分:1)

结束了两个领域 - lowercaseusername - originalusername

这样我可以使用lowercaseusername

搜索用户