用于拉取 JSON 数据库元素的嵌套循环



当我从 JSON 文件中提取数据时,我正在尝试在 select2 字段中创建一个动态组。我使用嵌套循环首先遍历各州,然后遍历该州的大学。<optgroup>标签应该是州,<option>应该是大学。

你在下面看到的是我当前的代码,代表我尝试过的内容。

包含数据库信息的 JSON 文件:

var collegeData = [
    {
    'Ohio': 
        [
            {name: 'Colllege of Wooster', value: 'cow'}, 
            {name: 'Ohio State University', value: 'osu'}
        ],
    'Arizona': [
            {name: 'Arizona State University', value: 'asu'}
        ]
    }
];

使用 ejs 循环选择2:

<select class="single-select" id="college" name="college">
  <option value="default"></option>
    <% for(var i = 0; i < college.length; i++) {%>
      <optgroup label="<%=college[i] %>">
        <% for(var j = 0; j < college[i][j].length; j++) {%>
         <option value="<%=college[i][j].value %>"> 
         <%=college[i][j].name %></option>
      <%}%>
    </optgroup>
  <%}%>
</select>

控制器:

var mongodb = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/collegeApp';
app.get('/', function(rep, res){
    mongodb.connect(url, (error, database) => {
        const db = database.db('collegesApp');
        if (error) return process.exit(1);
        console.log('Connection is linked');
        const collection = db.collection('colleges');
        collection.find({}).toArray(function(err, results){
            if (err) throw err;
            res.render('index', {  nav, college: results });
        });
    });
});

HTML 中的理想输出:

<select class="single-select" id="college" name="college">
  <option value="default"></option>
      <optgroup label="Ohio">
         <option value="cow"> College of Wooster</option>
         <option value="osu"> Ohio State University</option>
      </optgroup>
      <optgroup label="Arizona">
         <option value="asu"> Arizona State University</option>
      </optgroup>
</select>

我收到的错误是Cannot read 'length' of undefined,所以我知道有问题。我的想法是这与我的语法有关,但如果您有其他想法,我很乐意听到。

我也已经看过W3Schools JSON Arrays的文章,以及一篇关于JSON数组的代码爆破文章。两者都没有我需要的那么具体。

谢谢!

尝试以下操作:
1. 在控制器中执行此查询以从结果中排除_id

collection.find({}, { _id: 0 }).toArray(function(err, results){
... 

2.在 ejs 文件中尝试以下循环。

<select class="single-select" id="college" name="college">
  <option value="default"></option>
  <% college.forEach((coll) => { %>
    <% Object.entries(coll).forEach(([key, value]) => { %>
      <optgroup label="<%= key %>" >
        <% Object.entries(value).forEach(([cKey, cValue]) => { %>
           <option value="<%= cValue.value %>"> <%= cValue.name %> </option>
        <% }); %>
      </optgroup>
    <% }); %>
  <% }); %>  
</select>

希望它有效。

相关内容

  • 没有找到相关文章

最新更新