Mongoose - возвращает единый документ вместо массива документов с агрегированием - PullRequest
0 голосов
/ 14 сентября 2018

Прежде чем начать использовать агрегат для создания временной метки документа, я использовал findOne, чтобы я мог получить один объект, но теперь я получаю массив с одним объектом.Можно ли заставить запрос возвращать отдельный объект вместо массива?Заранее спасибо.

Используемый мной запрос:

  News.aggregate()
    .match({ '_id': n })
    .project({ 'title': true, 'text': true, 'timestamp': { '$subtract': ['$date', new Date('1970-01-01')] } })

Что возвращается:

[
    {
        "_id": "5b9650beae847b1e5866cace",
        "title": "Notícia 2",
        "text": "Texto da Notícia 2",
        "timestamp": 1543807353257
    }
]

Что бы я хотел получить:

{
    "_id": "5b9650beae847b1e5866cace",
    "title": "Notícia 2",
    "text": "Texto da Notícia 2",
    "timestamp": 1543807353257
}

1 Ответ

0 голосов
/ 14 сентября 2018

Aggregate метод возвращает массив;это определенное поведение.Если вы хотите адаптировать это поведение по своему усмотрению, вы можете либо заново создать свою собственную функцию агрегирования;или иметь дело с массивом при каждом вызове;как:

async function aggregate(model, func) {
  const aggregateObject = func(News.aggregate());

  const ret = await aggregateObject.exec();

  // Deal with the fact there is no answer
  if (ret && ret.length) {
    return ret[0];
  }

  return false;
}

const directData = await aggregate(News, (aggregateObj) => {
  return aggregateObj
    .match(...)
    .project(...);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...