簡體   English   中英

從MongoDB和Meteor中的多個選擇器元素中查找文檔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM