我正在构建一个将问题消息存储在数据库中的流星应用程序。您可以要求提供邮件列表,但您也可以搜索邮件。有三个搜索字段:日期,患者ID和请求编号。可以搜索带有一个或多个字段的消息。这些响应是所有完成字段相同的消息。因此,我建立了以下查询:用流星和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',没有小时。这就是我使用正则表达式的原因。它是这样的:'选择*从问题whereDateTime如04/05/2012%'。我怎样才能解决这个图形日期选择器? – Quantum
我在我的回答中加了一个例子 – Dave
好的,我明白了。感谢这个解决方案。我没有想过这种查询。 – Quantum