TL; DR
Не использовать RegExp
Перейти к естественному и использовать встроенное индексирование mongodb, поиск
db.articles.insert(
[
{ _id: 1, subject: "coffee", author: "xyz", views: 50 },
{ _id: 2, subject: "Coffee Shopping", author: "efg", views: 5 },
{ _id: 3, subject: "Baking a cake", author: "abc", views: 90 },
{ _id: 4, subject: "baking", author: "xyz", views: 100 },
{ _id: 5, subject: "Café Con Leche", author: "abc", views: 200 },
{ _id: 6, subject: "Сырники", author: "jkl", views: 80 },
{ _id: 7, subject: "coffee and cream", author: "efg", views: 10 },
{ _id: 8, subject: "Cafe con Leche", author: "xyz", views: 10 }
]
)
Необходимо создать индекс в зависимости от того, какое поле TEXT вы хотите искать, без запроса индексирования будет чрезвычайно медленным
db.articles.createIndex( { subject: "text" } )
db.articles.find( { $text: { $search: "coffee",$caseSensitive :true } } ) //FOR SENSITIVITY
db.articles.find( { $text: { $search: "coffee",$caseSensitive :false } } ) //FOR INSENSITIVITY
Можно просто использовать !=
вместо этого.
Я думаю, что это было бы хорошо, если бы Вы прокомментировали его, например, // ^ == XOR
.
Я нахожу, что у меня есть подобные переговоры много. С одной стороны, у Вас есть компактный, эффективный метод достижения Вашей цели. С другой стороны, у Вас есть что-то, что остальная часть Вашей команды не могла бы понять, будучи сложно поддерживать в будущем.
Мое общее правило состоит в том, чтобы спросить, является ли используемая техника чем-то, что разумно ожидать, что программисты в целом будут знать. В этом случае я думаю, что разумно ожидать, что программисты будут знать, как использовать булевы операторы, таким образом с помощью xor в, если оператор хорошо.
, Поскольку пример чего-то, что не было бы хорошо, возьмите прием использования xor для свопинга двух переменных, не используя временную переменную. Это - прием, с которым я не ожидал бы, что все будут знакомы, таким образом, он не передаст обзор кода.
Я недавно использовал xor в проекте JavaScript на работе, и закончил тем, что добавил 7 строк комментариев для объяснения, что продолжалось. Выравнивание для использования xor в том контексте состояло в том, что одно из условий (term1
в примере ниже) могло взять не два но три значения: undefined
, true
или false
, в то время как другой (term2
) мог быть true
или false
. Я должен был бы добавить дополнительную проверку на эти undefined
случаи, но с xor, следующее было достаточно, так как xor вынуждает первый срок быть сначала оцененным, поскольку булевскую переменную, позволяя undefined
рассматривают как [1 110]:
if (term1 ^ term2) { ...
Это было, в конце, чем-то вроде излишества, но я хотел сохранить его там так или иначе как вид пасхального яйца.
Если шаблон использования выравнивает по ширине его, почему нет? В то время как Ваша команда не распознает оператор сразу же, со временем они могли. Люди изучают новые слова все время. Почему не в программировании?
единственная осторожность, которую я мог бы заявить, состоит в том, что "^" не имеет семантики короткого замыкания Вашей второй булевой проверки. Если Вам действительно нужна семантика короткого замыкания, то статический util метод работает также.
public static boolean xor(boolean a, boolean b) {
return (a && !b) || (b && !a);
}
Я думаю, что Вы ответили на свой собственный вопрос - если Вы получаете странные взгляды от людей, вероятно, более безопасно пойти с более явной опцией.
, Если необходимо прокомментировать его, тогда Вы - вероятно, более обеспеченная замена его с более подробной версией и тем, чтобы не заставлять людей задать вопрос во-первых.
! = в порядке для сравнения двух переменных. Это не работает, тем не менее, с несколькими сравнениями.
if((boolean1 && !boolean2) || (boolean2 && !boolean1))
{
//do it
}
ИМХО, этот код можно упростить:
if(boolean1 != boolean2)
{
//do it
}