Я пытаюсь собрать коллекцию в монго, используя следующий конвейер:
const results = await Price.aggregate([
{ $match: { date: today } },
{ $unwind: '$points' },
{ $match: { 'points.time': { $gte: start, $lte: now } } },
{ $sort: { 'points.time': 1 } },
{ $project: {
'high': { $max: '$points.price' },
'low': { $min: '$points.price' },
'open': { $arrayElemAt: ['$points', 0] },
'close': { $arrayElemAt: ['$points', -1] }
} }
])
Однако оператор $arrayElemAt
предположительно не работает, потому что один из предыдущих этапов ($unwind
я считаю,) преобразует массив точек, которые есть в моих документах, в объект.Как я могу это исправить?
Пример документа:
{
"_id" : ObjectId("5c93ac3ab89045027259a23f"),
"date" : ISODate("2019-03-21T00:00:00Z"),
"symbol" : "CC6P",
"points" : [
{
"_id" : ObjectId("5c93ac3ab89045027259a244"),
"volume" : 553,
"time" : ISODate("2019-03-21T09:35:34.239Z"),
"price" : 71
},
{
"_id" : ObjectId("5c93ac3ab89045027259a243"),
"volume" : 1736,
"time" : ISODate("2019-03-21T09:57:34.239Z"),
"price" : 49
},
....
],
Мой ожидаемый результат - массив объектов, где точки, которые должны быть переданы на этап проекта, должны быть точками в указанном диапазонево втором $match
.Я попытался объединить два этапа $match
и удалить этап $unwind
, и ошибка исчезла, однако временной диапазон не применяется