NodeJS + MongoDB:具有特定条件的find()

时间:2012-06-17 11:31:11

标签: node.js mongodb database

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

1 个答案:

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

Live condition DEMO