我不知道如何做到这一点,所以我需要你的建议。我有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
});
});
};
在哪里的问题?只需使用真实的键创建对象并将其他对象留出。 – noob
不知道我对你的理解是否正确。我应该在哪里创建一个新的对象,数据库与collection.insert()或在哪里?就我所知,你建议发送这个对象作为查找请求的参数或什么? – f1nn
'stain'应该是'“true”':'collection.find({stain:“true”})''stain'&'black'应该是'“true”':'collection.find({stain:“ true“,black:”true“})' – noob