關於MongoDB的多條件查詢問題
阿新 • • 發佈:2019-02-14
這兩天用mongodb操作資料庫的時候,碰到了多條件查詢的問題,就是前端頁面給出幾個查詢條件,使用者任意選擇一個或多個條件進行查詢,後臺匹配資料庫後返回對應資料。
大家都知道mongodb的查詢可以用find()方法,舉個例子,頁面上有三個查詢條件:id,姓名,性別。
一般情況下後臺是這樣查詢的
/*程式碼為程式片段,並不完整,只為了說明原理*/
var id=req.body.id;
var name=req.body.name;
var sex=req.body.sex;
Model.find({
id:id,
name:name,
sex:sex
}).then (function(userMsg){
data=userMsg;
res.json(data);
return;
});
這樣子的話,假如id,name,sex三個搜尋條件都有值傳給後臺,那麼最後返回前端的data就是查詢出來的對應資料。
但是多條件查詢的話,你不能要求使用者填寫完所有條件,假如使用者只用姓名去查詢的話,後臺獲取到的有效資料就只有name了,id和sex的值都是“ ”,這時候用上面的方法查詢就不會有結果了,因為資料庫不會只根據name去匹配,而是根據name和id=”“,sex=”“去匹配,毫無疑問,這並不是使用者想要的結果。
因為mongodb的find()並不能像sql那樣,判斷是否空值,然後拼接字串語句進行查詢,那要怎樣查詢呢,直接上程式碼
var id=req.body.id;
var name=req.body.name;
var sex=req.body.sex;
var Data={};
/*這樣子就能動態的把不為空的資料新增到Data裡面了*/
if(id!="") Data.id=id;
if(name!="") Data.name=name;
if(sex!="") Data.sex=sex;
Model.find(Data).then(
function(userMsg){
data =userMsg;
res.json(data);
return;
});
這樣子進行查詢的話,就會只根據不為空的值進行匹配,使用者就能獲得想要的資料了。