Странное поведение MongoDB требует объяснения

Итак, вчера я начал возиться с MongoDB в Node, и когда дело дошло до извлечения данных, я столкнулся со странной практикой. Вы извлекаете данные из коллекции, вложенной в базу данных, путем вызова.

data = client.db([dbname]).collection([collectionname]).find([searchcriteria])

и это возвращает то, что кажется объектом, по крайней мере, в глазах typeof

Затем пример кода использует следующие строки для вывода его на консоль:

function iterate(x){ 
    console.info(x)
}
data.forEach(iterate)

Вывод, как и ожидалось, в данном случае два объекта с 2 парами, пока все в порядке.

Я подумал, что функция итерации не нужна, поэтому я изменил ее на просто

console.info(data)

ожидая 2 объекта в массиве или вложенных в другой объект, но я получаю этот огромный объект со всеми видами разных вещей в нем ЗА ИСКЛЮЧЕНИЕМ двух объектов, которые мы видели раньше.

Итак, теперь к моему вопросу и тому, что мне нужно более глубокое объяснение:

почему я могу использовать .forEach() на этом объекте, я не могу воссоздать это на других объектах.

и во-вторых, почему console.info(data) дает мне весь этот вывод, который скрыт, если я вызываю его через .forEach()?

и есть ли другой способ быстро в течение одной или двух строк кода получить данные из Mongo?

это кажется очень не полезным способом ведения дел. и как работает эта штука .forEach() с объектами? Я нашел статью здесь, в стеке, но она была не очень подробной и не очень простой для понимания.

forEach используется для объекта массива

Qingfei Yuan 30.05.2019 21:33
Поведение ключевого слова "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
1
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Функция find возвращает курсор — это огромный объект, который вы видите. Документация по оформлению заказа для получения более подробной информации здесь: https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find

Причина, по которой вы можете вызывать forEach для возвращаемого объекта (=курсор), заключается в том, что это один из его методов. См. https://docs.mongodb.com/manual/reference/method/cursor.forEach/#cursor.forEach

Обзор всех методов курсора здесь: https://docs.mongodb.com/manual/reference/method/js-cursor/

Чтобы получить массив данных, которые вы ищете, вам нужно использовать метод toArray, например:

const data = client.db([dbname]).collection([collectionname]).find([searchcriteria]).toArray()

Спасибо. Вы были самым полезным парнем в этом сообществе, и вы были добры при этом! Впервые меня не линчевали за то, что я задал нубский вопрос, я, конечно, перерыл документы, но они довольно беспорядочны, и я не мог найти, что, может быть, я просто наблюдал за этим. Но спасибо за помощь не штатным, а новичкам.

seeyouinthefuture 31.05.2019 01:58

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