La consulta de prefijo simple de Mongodb con expresiones regulares y ordenación es lenta

Estoy atascado con esta simple consulta de prefijo. A pesar de queMongo docs Indique que puede obtener un rendimiento bastante bueno utilizando el formato de expresiones regulares de prefijo (/ ^ a /), la consulta es bastante lenta cuando intento ordenar los resultados:

940 milisios

db.posts.find ({hashtags: / ^ noticias /}). limit (15) .sort ({rank: -1}). hint ('hashtags_1_rank_-1'). explicar ()

{
"cursor" : "BtreeCursor hashtags_1_rank_-1 multi",
"isMultiKey" : true,
"n" : 15,
"nscannedObjects" : 142691,
"nscanned" : 142692,
"nscannedObjectsAllPlans" : 142691,
"nscannedAllPlans" : 142692,
"scanAndOrder" : true,
"indexOnly" : false,
"nYields" : 1,
"nChunkSkips" : 0,
"millis" : 934,
"indexBounds" : {
    "hashtags" : [
        [
            "noticias",
            "noticiat"
        ],
        [
            /^noticias/,
            /^noticias/
        ]
    ],
    "rank" : [
        [
            {
                "$maxElement" : 1
            },
            {
                "$minElement" : 1
            }
        ]
    ]
},
"server" : "XRTZ048.local:27017"
}

Sin embargo, la versión sin clasificar de la misma consulta es súper rápida:

0 milis

db.posts.find ({hashtags: / ^ noticias /}). limit (15) .hint ('hashtags_1_rank_-1'). explicar ()

{
"cursor" : "BtreeCursor hashtags_1_rank_-1 multi",
"isMultiKey" : true,
"n" : 15,
"nscannedObjects" : 15,
"nscanned" : 15,
"nscannedObjectsAllPlans" : 15,
"nscannedAllPlans" : 15,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
    "hashtags" : [
        [
            "noticias",
            "noticiat"
        ],
        [
            /^noticias/,
            /^noticias/
        ]
    ],
    "rank" : [
        [
            {
                "$maxElement" : 1
            },
            {
                "$minElement" : 1
            }
        ]
    ]
},
"server" : "XRTZ048.local:27017"

}

La consulta también es rápida si elimino la expresión regular y la ordeno:

0 milis

db.posts.find ({hashtags: 'noticias'). limit (15) .sort ({rank: -1}). hint ('hashtags_1_rank_-1'). explicar ()

{
"cursor" : "BtreeCursor hashtags_1_rank_-1",
"isMultiKey" : true,
"n" : 15,
"nscannedObjects" : 15,
"nscanned" : 15,
"nscannedObjectsAllPlans" : 15,
"nscannedAllPlans" : 15,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
    "hashtags" : [
        [
            "noticias",
            "noticias"
        ]
    ],
    "rank" : [
        [
            {
                "$maxElement" : 1
            },
            {
                "$minElement" : 1
            }
        ]
    ]
},
"server" : "XRTZ048.local:27017"

}

Parece que el uso tanto de expresiones regulares como de ordenación hace que Mongo analice muchos registros. Sin embargo, la ordenación es solo 15 si no uso la expresión regular. ¿Qué está mal aquí?

Respuestas a la pregunta(1)

Su respuesta a la pregunta