我正在構建一個將問題消息存儲在數據庫中的流星應用程序。您可以要求提供郵件列表,但您也可以搜索郵件。有三個搜索字段:日期,患者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