首页 > 解决方案 > 如何对 Mongo 上的特定记录集进行排序的不同查询?

问题描述

从包含股票信息的中等大小的集合(约 1m 行)中,我想查询特定的公司/股票,然后对于该公司,返回按日期区分的最高回报。

这是数据的表示形式(为简洁起见,省略了字段:

{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-18T04:00:00.000+0000", 
    "flatreturn" : 0.82, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-18T04:00:00.000+0000", 
    "flatreturn" : 0.92, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-18T04:00:00.000+0000", 
    "flatreturn" : 0.52, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-18T04:00:00.000+0000", 
    "flatreturn" : 1.82, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-22T04:00:00.000+0000", 
    "flatreturn" : 0.43, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-22T04:00:00.000+0000", 
    "flatreturn" : 6.92, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-22T04:00:00.000+0000", 
    "flatreturn" : 0.12, 

}
{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-22T04:00:00.000+0000", 
    "flatreturn" : 0.01, 

}

显然,数据集更大,不仅仅是 AAPL,而是出于说明目的,仅显示数据的子集。

我能够找到一个特定的股票,按到期和固定回报排序。但是,这显然不会给我不同的值,因为我只想要每个过期组的一条记录。

db.getCollection("stocks").find(
    { 
        "Symbol" : "AAPL"
    }
).sort(
    { 
        "Expiration" : 1.0, 
        "flatreturn" : -1.0
    }
);

我想要的输出是针对特定股票,找到每组日期中的最高回报。因此,对于上述数据集,所需的返回数据将是:

{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-18T04:00:00.000+0000", 
    "flatreturn" : 1.82, 

}

{ 
    "Symbol" : "AAPL", 
    "Expiration" : "2019-10-22T04:00:00.000+0000", 
    "flatreturn" : 6.92, 

}

在所需的回报数据集中,我在 2019-10-18 组中获得了最高回报,在 2019-10-22 组中也是如此。

感谢有关构建查询的任何指导。通过更多信息,如果这在 Mongo 中是不可能的,我想这个论点可以在 JS(节点)中进行,但鉴于我的特定股票数据集将返回大约 1000 条记录,我不确定在 JS 中执行不同查询的效率(或者,实际上,如何在 JS 中执行此操作)。

标签: node.jsmongodb

解决方案


推荐阅读