2012-06-17 61 views
0

我不知道如何做到這一點,所以我需要你的建議。我有4個複選框形式:NodeJS + MongoDB:查找()具體條件

<input type="checkbox" class="checkbox" id="check_stain"> 
<input type="checkbox" class="checkbox" id="check_black"> 
<input type="checkbox" class="checkbox" id="check_titan"> 
<input type="checkbox" class="checkbox" id="check_special"> 

我發送帶有簡單的數據提交,因此,如果check_stain被選中,然後req.body.check_stain會「上」,如果不是 - 「不確定」。

在我的分貝我有收集「公司」,與幾個對象,每個都包含這樣的模式:

{... 
    "stain": "false", 
    "black": "true", 
    "titan": "false", 
    "special": "true", 
...} 

值是簡單的字符串。所以,我需要獲取指定複選框爲真(on)的每個對象,但不包括nones(未定義)的對象。換句話說,我想創建一個簡單的搜索算法。讓我舉個例子:我們檢查check_stain,我們應該得到污點是「真實」的每個對象。也許其他值將是「真」/「假」(無所謂)。如果我們選擇check_stain和check_black,我們得到污點& black =「true」的對象,其他字段不感興趣。

我總是以這樣代碼中找到:

collection.find({ %my-condition% } ,function(err, companies) { 
    companies.each(function(err, company){ 
     //do smth with found 
    }); 
}); 

但我不知道怎麼寫條件去找尋。我想,我應該在請求中使用$或operator。我閱讀了文檔,但我仍然無法得到它。謝謝。

UPDATE:咦,這似乎是我的問題的解決方案:

if (req.body.sort_query == 'req-steel') { 
var condition = {} 
if (req.body.check_stain == "on") {condition['stain'] = 'true';} 
if (req.body.check_black == "on") {condition['black'] = 'true';} 
if (req.body.check_titan == "on") {condition['titan'] = 'true';} 
if (req.body.check_other == "on") {condition['special'] = 'true';} 
for (var i in condition) { 
    if (condition[i] != "true") { 
     delete condition[i]; 
    } 
} 
var companies_list = new Array(); 
collection.find(condition, function (err, companies) { 
    companies.each(function (err, company) { 
     //do smth 
    }); 
}); 
}; 
+0

在哪裏的問題?只需使用真實的鍵創建對象並將其他對象留出。 – noob

+0

不知道我對你的理解是否正確。我應該在哪裏創建一個新的對象,數據庫與collection.insert()或在哪裏?就我所知,你建議發送這個對象作爲查找請求的參數或什麼? – f1nn

+0

'stain'應該是'「true」':'collection.find({stain:「true」})''stain'&'black'應該是'「true」':'collection.find({stain:「 true「,black:」true「})' – noob

回答

1

例如黑色和染色爲真:

var condition = { 
    "stain": "false", 
    "black": "true", 
    "titan": "false", 
    "special": "true", 
} 

for (var i in condition) { 
    if (condition[i] != "true") { 
     delete condition[i]; 
    } 
} 

collection.find(condition ,function(err, companies) { 
    companies.each(function(err, company){ 
     //do smth with found 
    }); 
}); 

Live condition DEMO

+0

謝謝你,給我一點時間來檢查你的代碼。我仍然不能得到它是如何工作的... – f1nn

+0

只需從條件對象中刪除所有不是真的鍵。 – noob

+0

我已更新我的帖子。這是我寫的代碼。我已經越過了我的手指並啓動了它:)呵呵,它似乎正在正常工作:)非常感謝! – f1nn