Puis-je faire une MongoDB “commence par” requête sur une indexé sous-domaine?
J'essaie de trouver des documents où un champ commence par une valeur.
Les analyses de la Table sont désactivés à l'aide de notablescan.
Cela fonctionne:
db.articles.find({"url" : { $regex : /^http/ }})
Ce n'est pas le cas:
db.articles.find({"source.homeUrl" : { $regex : /^http/ }})
J'obtiens l'erreur:
error: { "$err" : "table scans not allowed:moreover.articles", "code" : 10111 }
Il existe des index sur les deux url
et 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
}
Il y a des restrictions avec la regex requêtes sur les sous-indices?
- Devrait fonctionner, ce qui se produit lorsque vous ne l'expliquez? Avez-vous essayé de le faire fonctionner avec une base de données permettant une analyse? (avec explications).
- J'ai essayé de lancer l'expliquer, mais il a été si long, j'ai dû le tuer. Les requêtes à la fois d'obtenir les résultats escomptés si j'active les analyses de la table.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous désactivez les analyses de la table, cela signifie que toute requête d'où une analyse de table "gagne" dans l'optimiseur de requête ne peut pas s'exécuter. Vous n'avez pas posté d'expliquer, mais il est raisonnable de supposer que c'est ce qui se passe ici, basé sur l'erreur. Essayez allusion à l'index de manière explicite:
Qui devrait mettre fin à l'analyse de la table comme un choix possible et de permettre à la requête de retour avec succès.