1

我对此很陌生,所以就到这里。
试图从 MongoDb 中获取一个名为“Bob”的用户。

我有:

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

如果“bob”有大写“Bob”,则无法找到该“bob”。
我知道我可以得到 a Listand doequalsIgnoreCase但是
有一些我可以使用的运算符吗?

我有用户登录并且必须测试以查看他们是否已注册。用户可以随意输入他的名字,因此必须找到一种方法来 equalsIgnoreCase。是的,这是一个问题,如果有 10,000 个,我无法获取所有名称并执行 equalsIgnoreCase。当然,最初可以将所有用户名保存为小写,但这会破坏名称的视觉外观。

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

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

4

3 回答 3

2

像这样使用java正则表达式。

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

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

于 2011-09-24T05:58:17.207 回答
1

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

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

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

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

这些代码将在一个UserDataDao扩展BasicDao中,并在构造函数中接收来自 morphia 的数据存储。

于 2011-09-23T19:04:15.477 回答
1

最终保留了两个字段,例如 - 小写用户名 - 原始用户名

这样我可以使用小写用户名搜索用户

于 2012-07-05T08:23:44.777 回答