java, Morphia, как сравнивать строки при использовании методов поиска Morphia - PullRequest
1 голос
/ 23 сентября 2011

Я новичок в этом, так что здесь.
Попытка получить пользователя с именем «Боб» из MongoDb.

У меня есть:

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

"Боб" не может быть найден, если он имеет заглавную "Боб".
Я понимаю, что могу получить List и сделать equalsIgnoreCase, но
Есть ли операторы, которые я могу использовать?

У меня есть пользователи, вошедшие в систему, и я должен проверить, зарегистрированы ли они. Пользователь может ввести свое имя так, как ему нравится, поэтому он должен найти способ equalsIgnoreCase. Да, это проблема, я не могу получить все имена и сделать equalsIgnoreCase, если их около 10000. Конечно, можно изначально сохранить все имена пользователей в нижнем регистре, но это разрушит внешний вид имени.

смотрит на вики, но ничего не видит ..

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

Ответы [ 3 ]

2 голосов
/ 24 сентября 2011

Используйте регулярное выражение 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. )

Вы должны быть уверены, что имена пользователей, которые вы используете для проверкиновый пользователь должен быть уникальным в вашей системе.

1 голос
/ 05 июля 2012

Завершено сохранение двух полей, как - нижний регистр - originalusername

Таким образом, я мог бы искать пользователя, используя имя нижнего регистра

1 голос
/ 23 сентября 2011

Вы можете найти имя UserData, используя этот код:

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

В моем приложении этот код возвращает все UserData, которые имеют поле name со значением "bob". Код тоже может быть таким:

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

Эти коды будут в UserDataDao, который расширяет BasicDao и получает в создателе хранилище данных от morphia.

...