从mongodb获取嵌套数组并使用节点js在前端显示

问题描述 投票:0回答:2

请帮帮我..

我正在尝试使用我的代码的Nodejs从mongodb检索数据

index.js

var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/studentprogression';
var str = "";

app.route('/results').get(function(req, res)

    {
        MongoClient.connect(url, function(err, db) {
            var cursor = db.collection('results').find();
            //noinspection JSDeprecatedSymbols
            cursor.each(function(err, item) {

                if (item != null) {
                    str = str + "  " + item.marks + "</br>";
                }
            });
            res.send(str);
            db.close();
        });
    });

var server = app.listen(3000, function() {}); 

我在mongodb的数据库是

{ _id: 5c6935d6b215280be42a6005,
  srn: '01FM17CCA004',
  marks:
   [ { sub1: 'E',
       sub2: 'D',
       sub3: 'A',
       sub4: 'D',
       sub5: 'S',
       taken: 20,
       earned: 20,
       sgpa: 6.95,
       _id: 5c6935d6b215280be42a6006 } ],
  __v: 0 }

和输出应该是数组内部的数据(sub1,.... sgpa),但我得到[对象对象]

所以请帮帮我

javascript node.js mongodb
2个回答
0
投票

您不应该在HTTP请求回调中连接到mongo,连接到它一次并重新使用该连接。

const mongoClient = new MongoClient(url, { useNewUrlParser: true });

mongoClient.connect((err) => {
  if (err) throw err;

  // Available via req.app.locals.db.
  app.locals.db = mongoClient.db('your-database');

  app.listen(3000); 
});

您可以调用toArray而不是循环游标,我建议您不要将数据格式化为服务器上的字符串,而是将数组作为JSON传递回客户端,让客户端将其呈现出来但是它需要:

app.route('/results').get(async (req, res) => {
  const { db } = req.app.locals;
  const results = await db.collection('results').toArray();
  res.status(200).json(results);
});

0
投票

你的item对象不是一个简单的字符串。它是一个对象数组。要将实际对象转换为字符串,您必须迭代它或者Dominic说使用.toArray()方法使事情变得更简单。 [Object object]之所以出现,是因为您已将整个对象映射到字符串。

同样如上面的Dominic所说,请不要在请求回调中建立http连接,之前连接它并使用连接来引用数据库。

© www.soinside.com 2019 - 2024. All rights reserved.