insensitive index regex mongodb search indexing full-table-scan

regex - insensitive - mongodb text index



¿Puedo hacer una consulta de MongoDB "comience con" en un campo de subdocumento indexado? (1)

Estoy tratando de encontrar documentos donde un campo comienza con un valor.

Las exploraciones de tablas se desactivan usando notablescan .

Esto funciona:

db.articles.find({"url" : { $regex : /^http/ }})

Esto no hace

db.articles.find({"source.homeUrl" : { $regex : /^http/ }})

Me sale el error

error: { "$err" : "table scans not allowed:moreover.articles", "code" : 10111 }

Hay índices tanto en url como en source.homeUrl :

{ "v" : 1, "key" : { "url" : 1 }, "ns" : "mydb.articles", "name" : "url_1" } { "v" : 1, "key" : { "source.homeUrl" : 1 }, "ns" : "mydb.articles", "name" : "source.homeUrl_1", "background" : true }

¿Hay alguna limitación con las consultas de expresiones regulares en los índices de subdocumentos?


Cuando desactivas las exploraciones de tablas, significa que cualquier consulta en la que una exploración de tablas "gane" en el optimizador de consultas no se ejecutará. No ha publicado una explicación, pero es razonable suponer que eso es lo que está sucediendo aquí según el error. Trate de insinuar el índice explícitamente:

db.articles.find({"source.homeUrl" : { $regex : /^http/ }}).hint({"source.homeUrl" : 1})

Eso debería eliminar la exploración de la tabla como una posible opción y permitir que la consulta regrese con éxito.