【发布时间】:2022-01-05 12:22:27
【问题描述】:
我有一个包含大约 1020 万条记录的集合。我的聚合查询大约需要 6 秒才能发回一条记录。如何优化我的聚合查询。?索引在 token0address、token1address 和时间戳字段上定义。
以下是我的查询
{
$match: {
$or: [
{
token0Address: quoteCurrency,
},
{
token1Address: quoteCurrency,
},
],
timestamp: {
$gte: Number(historyDTO.from),
$lte: Number(historyDTO.to),
},
},
},
{
$group: {
_id: idObj,
transactionDate: { $first: '$transactionDate' },
timestamp: { $first: '$timestamp' },
minimum_price: { $min: '$priceInToken0' },
maximum_price: { $max: '$priceInToken0' },
median_price: { $avg: '$priceInToken0' },
open_price: { $first: '$priceInToken0' },
close_price: { $last: '$priceInToken0' },
volume: { $sum: '$priceInToken0' },
},
},
{ $sort: { timestamp: -1 } },
{ $skip: 0 },
{ $limit: Number(historyDTO.countback) },
idObj 长这样。它也包含其他组合
if (last === 'H') {
idObj = {
day: { $dayOfYear: '$transactionDate' },
hour: {
$subtract: [
{ $hour: '$transactionDate' },
{ $mod: [{ $hour: '$transactionDate' }, parseInt(exceptLast)] },
],
},
};
}
【问题讨论】:
-
{ $skip: 0 }的目的是什么? -
也许可以试试$setWindowFields()
标签: typescript mongodb mongoose aggregate nestjs