Получить вложенный массив из mongodb и отобразить во внешнем интерфейсе с помощью узла js

Пожалуйста, помогите мне..

Я пытаюсь получить данные из mongodb с помощью Nodejs. мой код

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]

Пожалуйста, помогите мне

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
228
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не должны подключаться к монго в обратных вызовах HTTP-запросов, подключаться к нему один раз и повторно использовать это соединение.

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);
});

ваш объект item не является простой строкой. это массив объектов. Чтобы преобразовать фактический объект в строку, вам придется выполнить итерацию по нему или, как сказал Доминик, использовать метод .toArray(), чтобы упростить задачу. [Object object] появляется, потому что вы сопоставили весь объект со строкой.

Кроме того, как сказал Доминик выше, пожалуйста, не делайте http-соединения в обратных вызовах ваших запросов, подключите его раньше и используйте соединение для ссылки на базу данных.

Другие вопросы по теме