[英]Find documents from a multiple selector element in MongoDB and Meteor
你們將如何做到這一點:我有一個像這樣的多個html選擇器
<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>
如果用戶選擇第1周和第2周並單擊按鈕,查詢將需要查找那些文檔,其中“ Week1”和“ Week2”的字段值為“ 1”,而其他星期(Week3至Week6)等於“ 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" });
因此,根據用戶選擇的星期數,我們需要在mongo查詢的適當位置添加1。 這個怎么做?
所有的Weeks字段(Week1至Week6)都包含字符串“ 1”或“ 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]);
}
這將導致一個字符串數組,這樣,如果用戶選擇了Week 1,Week 3和Week 5,則該數組將為:
["1", "0", "1", "0", "1", "0"]
然后是Mongo查詢:
Programs.find({ Week1: final[0], Week2: final[1], Week3: final[2]... Week6: final[5] });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.