どうすればいいのかわからないので、アドバイスが必要です。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は「オン」になり、そうでない場合は「未定義」になります。
私のデータベースには、いくつかのオブジェクトを含むコレクション「会社」があり、そのすべてに次のようなスキーマが含まれています。
{...
"stain": "false",
"black": "true",
"titan": "false",
"special": "true",
...}
値は単純な文字列です。したがって、指定されたチェックボックスが真(オン)であるすべてのオブジェクトを取得する必要がありますが、チェックボックスが真(未定義)でないオブジェクトは含まれません。つまり、簡単な検索アルゴリズムを作成したいと思います。例を挙げましょう。check_stainをチェックし、stainが「true」であるすべてのオブジェクトを取得する必要があります。たぶん、他の値は「true」/「false」になります(関係ありません)。check_stainとcheck_blackを選択すると、stain&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
});
});
};