0

我不知道如何做到这一点,所以我需要你的建议。我有 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",
...}

值是简单的字符串。因此,我需要获取指定复选框为真(打开)的每个对象,但不包括那些没有(未定义)的对象。换句话说,我想创建一个简单的搜索算法。让我举个例子:我们检查 check_stain 并且我们应该得到污点为“真”的每个对象。也许其他值将是“真”/“假”(没关系)。如果我们选择 check_stain 和 check_black,我们会得到有污点 & black = "true" 的对象,其他字段不感兴趣。

我总是发现这样的代码:

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

但我不知道如何写条件来查找。我想,我应该在请求中使用 $or 运算符。我阅读了文档,但我仍然无法得到它。谢谢。

更新:嗯,这似乎是我的问题的解决方案:

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
    });
});
};
4

1 回答 1

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
    });
});

现场条件DEMO

于 2012-06-17T12:04:23.307 回答