1. 程式人生 > >關於MongoDB的多條件查詢問題

關於MongoDB的多條件查詢問題

這兩天用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; });

這樣子進行查詢的話,就會只根據不為空的值進行匹配,使用者就能獲得想要的資料了。