我不知道如何做到这一点,所以我需要你的建议。我有4个复选框的表单:
<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将“on”,如果不是 - “undefined”。
在我的数据库中,我有一些集合“公司”,有几个对象,每个对象都包含这样的模式:
{...
"stain": "false",
"black": "true",
"titan": "false",
"special": "true",
...}
值是简单的字符串。因此,我需要获取指定复选框为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
});
});
但我不知道如何写条件来查找。我想,我应该在请求中使用$或运算符。我阅读了文档,但我仍然无法理解。感谢。
更新:嗯,这似乎是我问题的解决方案:
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 :(得分: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
});
});