首页 > 解决方案 > 如何配置mongodb索引以在时间范围内按值排序?

问题描述

我有一个像下面这样的集合

tx_collection
    - value
    - from
    - to
    - timestamp

我想从集合中提取的是特定时间段内的最高 100 个值。

例如,

db.getCollection('tx_collection').find({"timestamp":{$gte:ISODate("2018-01-10T00:00:00.000Z")}}).sort({"value":-1}).limit(100)

为了查询性能,我创建了类似的索引

{value: -1, timestmap: 1}

但是,当我使用索引运行查找查询时,花费了太多时间,超过 10 秒。

测试查询之一是这样的

db.getCollection('tx_collection').find({"timestamp": {$gte: ISODate("2019-10-16T22:09:12.000Z")}}).sort({"value":-1}).limit(100)

因此,当我再次尝试使用时executionStatsnReturnedinputStageIXSCAN的值 > 100。我期望nReturned的是 100。

我的问题是,我的索引设置是否错误?如果它是错误的,什么是正确的索引?

这个链接是我之前问的。当前案例与链接案例有点不同)

标签: mongodbindexing

解决方案


这是自我解决。

在阅读并完全理解此文档后,我终于解决了。

连续查询是这样的:

db.getCollection('tx_collection').find({"value": {$gte: 0}, "timestamp": {$gte: ISODate("2019-10-16T22:09:12.000Z")}}).sort({"value":-1}).limit(100)

带索引{value: -1, timestmap: 1}

添加额外{"value": {$gte: 0}的查询前缀,,索引可以使用。


推荐阅读