Я создаю приложение метеоритов, которое хранит сообщения о проблемах в БД. Вы можете запросить список сообщений, но вы также можете искать сообщения. Существует три поля поиска: дата, идентификатор пациента и номер запроса. Можно искать сообщения с одним или несколькими полями. Ответ - это сообщения со всеми заполненными полями одинаковые. Поэтому я построил следующий запрос:Запрос команды поиска с метеором и MongoDB
Template.list.problems = function() {
var d = Session.get('search_on_date');
var p = Session.get('search_on_pid');
var r = Session.get('search_on_req');
var and_query = null;
if (d!=null && p==null && r==null) and_query = {'Problem.DateTime': RegExp('^'+d)};
if (d==null && p!=null && r==null) and_query = {'Problem.PID':p};
if (d==null && p==null && r!=null) and_query = {'Problem.Request':r};
if (d!=null && p!=null && r!=null) and_query = {$and: [{'Problem.DateTime': RegExp('^'+d)}, {'Problem.PID':p}, {'Problem.Request':r}]};
if (d!=null && p!=null && r==null) and_query = {$and: [{'Problem.DateTime': RegExp('^'+d)}, {'Problem.PID':p}]};
if (d==null && p!=null && r!=null) and_query = {$and: [{'Problem.PID':p}, {'Problem.Request':r}]};
if (d!=null && p==null && r!=null) and_query = {$and: [{'Problem.DateTime': RegExp('^'+d)}, {'Problem.Request':r}]};
return problems.find(and_query);
};
Это решение работает, и я очень рад этому. Но мой вопрос: есть ли более эффективный способ построения запроса? В этом случае я должен сделать if-инструкцию для каждой возможной комбинации заполненных полей. Таким образом, существует только три поля, но в случае многих полей я предполагаю, что должно быть лучшее решение.
Итак, мой вопрос: как я могу построить поисковый запрос с условием И очень эффективным способом, не слишком много накладных расходов?
Спасибо.
Дата сообщения проблемного что-то вроде этого: "04/05/2012 @ 09:53". Дата, которую пользователь может заполнить в форме поиска, приведен в примере '04/05/2012 ', без часа. Вот почему я использую Regex. Это что-то вроде: «Выберите * из проблем, где problem.DateTime, как 04/05/2012%». Как я могу решить это с помощью графического datepicker? – Quantum
Я добавил пример на мой ответ – Dave
ОК, я понимаю. Спасибо за это решение. Я не думал об этом вопросе. – Quantum