2016-01-13 82 views
0

多重选择器元件的文档你会如何家伙们这样的:我如果用户选择1周和2周,并点击了多个html选择这样查找MongoDB中和流星

<select multiple id="ss-week"> 
    <option value="" disabled selected>SS Week</option> 
    <option value="Week1">Week 1</option> 
    <option value="Week2">Week 2</option> 
    <option value="Week3">Week 3</option> 
    <option value="Week4">Week 4</option> 
    <option value="Week5">Week 5</option> 
    <option value="Week6">Week 6</option> 
    </select> 
    <button type="submit" id="ss-week-button">GO</button> 

按钮,查询将需要找到那些'Week1'和'Week2'的字段值为“1”且其他星期(第3周至第6周)等于“0”的文档。我有一些jQuery的,它将在选择到一个数组:

Template.clientQuery.events({ 
    'click #ss-week-button': function(event) { 
    event.preventDefault(); 
    var selectedValues = []; 
    $("#ss-week option:selected").each(function(){ 
    selectedValues.push($(this).val()); 
    //more code... 
}); 

在我们的例子中,selectedValues =“Week1”,“Week2”。现在为Mongo查询。它所需要的原则做的是:

Programs.find({ Week1: "1", Week2: "1", Week3: "0", Week4: "0", Week5: "0", Week6: "0" }); 

因此,基于用户的周选择,我们需要1层的在蒙戈查询相应的斑点。这个怎么做?

所有周字段(第1周到第6周)都包含字符串“1”或“0”。

回答

0

我回答了我的问题。它涉及一些for循环来创建1和0的正确数组。从一开始就开始,并从选择器创建选择的值的数组:

var selectedValues = []; 
    $("#ss-week option:selected").each(function(){ 
    selectedValues.push($(this).val()); 
    }); 

解析它们成整体,创建一个“零”阵列和接头1点的到适当的位置:

var zeroArray = ["0", "0", "0", "0", "0", "0"]; 
var ints = []; 
for (var i = 1, len = selectedValues.length; i < len; i++) 
    ints.push(parseInt(selectedValues[i])); 

for (var j = 0, leng = ints.length; j < leng; j++) 
    zeroArray.splice(ints[j] - 1, 1, 1); 

然后转动所有的值返回到字符串:

var final = []; 
for (var k = 0, leng = zeroArray.length; k < leng; k++) { 
    if (typeof zeroArray[k] === "number") 
    final.push((zeroArray[k]).toString()); 
    else 
    final.push(zeroArray[k]); 
} 

这将导致一个字符串数组,使得如果用户选择了第1周,第3周和5周,该阵列将是:

["1", "0", "1", "0", "1", "0"] 

然后蒙戈查询:

Programs.find({ Week1: final[0], Week2: final[1], Week3: final[2]... Week6: final[5] });