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は「オン」になり、そうでない場合は「未定義」になります。

私のデータベースには、いくつかのオブジェクトを含むコレクション「会社」があり、そのすべてに次のようなスキーマが含まれています。

{...
    "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
    });
});
};
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
    });
});

ライブコンディションデモ

于 2012-06-17T12:04:23.307 に答える