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

时间:2019-02-17 11:10:58

标签: javascript node.js mongodb

请帮帮我。.

我正在尝试使用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)内的数据,但是我将其作为[object Object]

所以请帮助我

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

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

也正如Dominic所说,请不要在请求回调中建立http连接,请先连接它,然后使用该连接来引用数据库。