@KushchO

Как Cursor из mongodb преобразовать в json строку?

Добрый день!
Преобразовав cursor c помощью метода toArray() получил такой массив:

[{"_id":"5c8e1a7b11598528844eb695","title":"Выполнить задачу","description":"","status":"pending","deadline":""},{"_id":"5c8e1a7b11598528844eb696","title":"Занятия Node.js","description":"Пройти главу по базам данных MongoDB","status":"pending","deadline":""}]

чтобы получить json строку я хочу преобразовать массив в объект, а потом применить JSON.stringify

Вот из этого ответа использовал предложенный метод https://toster.ru/q/517614:

collection.find({}).toArray(function(err, tasks){
if(err) return console.log(err);
let obj = tasks.reduce((res, el) => ({...res, ...el}), {});

console.log(obj);

res.send(tasks);
console.log("Данные отправленны");
})
});
и получаю просто последний объект, даже не вложенный ни во что:

{ _id: 5c8e1a7b11598528844eb696,
title: 'Занятия Node.js',
description: 'Пройти главу по базам данных MongoDB',
status: 'pending',
deadline: '' }
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
hzzzzl
@hzzzzl
так и должно быть, ведь поля _id title итд в объекте перезаписываются, не может быть у одно объекта несколько полей с одинаковым именем

как должен бы был выглядеть финальный объект после reduce?

может быть ты хочешь просто

collection.find({}).toArray(function(err, tasks){
  if(err) return console.log(err);
  res.send({ tasks });
  console.log("Данные отправленны");
})
});


только тогда вообще незачем toArray, можно сразу объект с результатом посылать например
collection.find({}).then(data => res.json(data))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы