Definición
planCacheSetFilterEstablecer un Filtro de índice para una colección. Si ya existe un filtro de índice para la forma de consulta de caché de plan, el comando anula el filtro de índice anterior.
Configuración de query
Nuevo en la versión 8.0.
A partir de MongoDB 8.0, utiliza la configuración del query en lugar de añadir filtros de índice. Los filtros de índices están en desuso a partir de MongoDB 8.0.
La configuración de queries tiene más funcionalidades que los filtros de índices. Además, los filtros de índice no son persistentes y no puedes crear fácilmente filtros de índice para todos los nodos del clúster. Para añadir ajustes de query y explorar ejemplos, consulta setQuerySettings.
El optimizador de consultas utiliza la configuración de la consulta como una entrada adicional durante la planificación de la consulta, lo que afecta el plan seleccionado para ejecutar la consulta.
Los ajustes se aplican a la forma de la query en todo el clúster. El clúster retiene la configuración después del apagado.
Puedes añadir configuraciones de query para los comandos find, distinct, y aggregate.
Para remover la configuración del query, utilice removeQuerySettings. Para obtener la configuración del query, utilice una etapa de $querySettings en una canalización de agregación.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Importante
Este comando no es compatible con los clústeres M0 y Flex. Para obtener más información, consulta Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando tiene la siguiente sintaxis:
db.runCommand( { planCacheSetFilter: <collection>, query: <query>, sort: <sort>, projection: <projection>, collation: { <collation> }, indexes: [ <index1>, <index2>, ...], comment: <any> } )
La forma de consulta de caché del plan para el filtro de índice es la combinación de:
querysortprojectioncollation
Campos de comandos
El comando tiene los siguientes campos:
Campo | Tipo | Descripción | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | El nombre de la colección para el filtro de índice. | ||||||||||
| Documento | El predicado de consulta para el filtro de índice. En el filtro de índice solo se utiliza la estructura del predicado, incluidos los nombres de campo. No se utilizan los valores de campo del predicado de consulta. Por lo tanto, el predicado de consulta de un filtro de índice lo utilizan consultas similares que difieren únicamente en los valores de campo. | ||||||||||
| Documento | Opcional. La ordenación para el filtro de índice. | ||||||||||
| Documento | Opcional. La proyección para el filtro de índice. | ||||||||||
| Documento | Especifica la intercalación a utilizar para la operación. La intercalación permite a los usuarios especificar reglas propias del lenguaje para la comparación de strings, como reglas para el uso de mayúsculas y minúsculas y marcas de acento. La opción de intercalación tiene la siguiente sintaxis: Al especificar la intercalación, el campo Si no se especifica la intercalación, pero la colección tiene una intercalación por defecto (ver Si no se especifica ninguna intercalación para la colección o para las operaciones, MongoDB utiliza la comparación binaria simple usada en versiones anteriores para las comparaciones de strings. No puedes especificar varias intercalaciones para una operación. Por ejemplo, no puedes especificar diferentes intercalaciones por campo, o si realizas una búsqueda con un ordenamiento, no puedes usar una intercalación para la búsqueda y otra para el ordenamiento. A partir de MongoDB 6.0, un filtro de índice utiliza la intercalación establecida previamente mediante el comando A partir de MongoDB 8.0, utiliza la configuración del query en lugar de añadir filtros de índice. Los filtros de índices están en desuso a partir de MongoDB 8.0. La configuración de queries tiene más funcionalidades que los filtros de índices. Además, los filtros de índice no son persistentes y no puedes crear fácilmente filtros de índice para todos los nodos del clúster. Para añadir ajustes de query y explorar ejemplos, consulta | ||||||||||
| arreglo | Una matriz de filtros de índice para la forma de consulta de caché del plan especificado. Especifique los filtros de índice como una de estas matrices:
El optimizador de consultas utiliza un análisis de colección o las matrices de índices para el plan de consulta. Si los índices especificados no existen o están ocultos, el optimizador utiliza un análisis de colección. Para varios índices con el mismo patrón de clave, debe especificar el índice como una matriz de nombres. | ||||||||||
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Los filtros de índice solo existen mientras dura el proceso del servidor y no persisten tras el apagado. Para borrarlos, utilice el planCacheClearFilters comando.
Acceso requerido
Un usuario debe tener acceso que incluya la planCacheIndexFilter acción.
Ejemplos
Establecer filtro en la forma de consulta de caché de plan que consta solo de predicado
El siguiente ejemplo crea un filtro de índice en la colección orders de modo que, para las consultas que consisten únicamente en una coincidencia de igualdad en el campo status sin ninguna proyección ni ordenamiento, el optimizador de consultas evalúa únicamente los dos índices especificados y el escaneo de la colección para el plan ganador:
db.runCommand( { planCacheSetFilter: "orders", query: { status: "A" }, indexes: [ { cust_id: 1, status: 1 }, { status: 1, order_date: -1 } ] } )
En el predicado de la query, solo la estructura del predicado, incluyendo los nombres de los campos, es significativa; los valores son insignificantes. Como tal, el filtro creado se aplica a las siguientes operaciones:
db.orders.find( { status: "D" } ) db.orders.find( { status: "P" } )
Para ver si MongoDB aplicará un filtro de índice para una forma de consulta de caché de plan, verifique el indexFilterSet campo del método db.collection.explain() cursor.explain() o.
Establecer filtro en la forma de consulta de caché del plan que consta de predicado, proyección y ordenación
El siguiente ejemplo crea un filtro de índice para la colección orders. El filtro se aplica a consultas cuyo predicado coincide con el campo item, donde solo se proyecta el campo quantity y se especifica una ordenación ascendente por order_date.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "ABC" }, projection: { quantity: 1, _id: 0 }, sort: { order_date: 1 }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
Para la forma de consulta de caché de plan, el optimizador de consultas solo considerará los planes indexados que utilicen el índice { item: 1, order_date: 1, quantity: 1 }.
Establecer filtro en la forma de consulta de caché de plan que consta de predicado y intercalación
El siguiente ejemplo crea un filtro de índice para la colección orders. El filtro se aplica a las consultas cuyo predicado coincide con el campo item y la intercalación en_US (inglés de Estados Unidos).
db.runCommand( { planCacheSetFilter: "orders", query: { item: "Movie" }, collation: { locale: "en_US" }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
Para la forma de consulta de caché de plan, el optimizador de consultas solo utiliza planes indexados que utilizan el índice { item: 1, order_date: 1, quantity: 1 }.
A partir de MongoDB,6.0 un filtro de índice utiliza la intercalación establecida previamente mediante el planCacheSetFilter comando.
A partir de MongoDB 8.0, utiliza la configuración del query en lugar de añadir filtros de índice. Los filtros de índices están en desuso a partir de MongoDB 8.0.
La configuración de queries tiene más funcionalidades que los filtros de índices. Además, los filtros de índice no son persistentes y no puedes crear fácilmente filtros de índice para todos los nodos del clúster. Para añadir ajustes de query y explorar ejemplos, consulta setQuerySettings.