Definición
$metaDevuelve los metadatos asociados con un documento, por ejemplo,
"textScore"al realizar una búsqueda de texto.Una expresión
$metatiene la siguiente sintaxis:{ $meta: <metaDataKeyword> } La expresión
$metapuede especificar los siguientes valores como el<metaDataKeyword>:KeywordDescripción"textScore"Devolver la puntuación asociada a la query
$textcorrespondiente para cada documento coincidente. La puntuación del texto indica la concordancia del documento con el término o términos buscados.{ $meta: "textScore" }se debe usar junto con una query$text.En versiones anteriores, si no se usa en conjunto con una
$textquery, retorna una puntuación nula."indexKey"Devuelve una clave de índice para el documento si se utiliza un índice que no es detexto. La expresión
{ $meta: "indexKey" }es solo para fines de depuración, y no para la lógica de la aplicación, y se prefiere sobrecursor.returnKey().MongoDB Search proporciona palabras clave adicionales de
$meta, como:Consulta la documentación de MongoDB Search para más detalles.
Importante
Las siguientes palabras clave
$metano son compatibles con Stable API V1:"textScore""indexKey""score""searchScore""scoreDetails""searchHighlights""searchSequenceToken""searchScoreDetails""vectorSearchScore""searchRootDocumentId"
Puede usar
searchScoresolo en$searchquery yvectorSearchScoresolo en$vectorSearchquery. Si usassearchScoreyvectorSearchScoreen cualquier otra query, esa query fallará.Puede usar
searchRootDocumentIdsolo en$searchconsultas conreturnScope.
Comportamiento
Metadatos de puntuación de texto $meta: "textScore"
Requiere búsqueda $text
La expresión
{ $meta: "textScore" }debe usarse junto con$text. Por ejemplo:En find, debes especificar el operador
$texten el predicado de query para usar{ $meta: "textScore" }. Si no especifica el operador$texten el predicado de query, la operación falla.
Nota
$textproporciona capacidades de query de texto para implementaciones autogestionadas (que no sean de Atlas). Para los datos alojados en MongoDB, MongoDB también ofrece una solución mejorada de query de texto completo, MongoDB Search.
Disponibilidad
En "find", la expresión
{ $meta: "textScore" }puede ser incluida en la proyección y ensort().
Uso en proyección
La expresión
{ $meta: "textScore" }puede formar parte del documento de proyección para incluir los metadatos de la puntuación de texto.La expresión
$metapuede estar presente tanto en una proyección de inclusión como en una de exclusión.Si configuró la expresión con un nombre de campo que ya existe en el documento, el valor de los metadatos proyectados sobrescribe el valor existente.
Filtro en Puntuación de texto
En la agregación, después de una etapa que genera un campo con el valor del puntaje de texto, puede especificar una condición de query u operar en el campo en etapas posteriores. Por ejemplo, consulta $text en la canalización de agregación.
En find, no puedes especificar una condición de query sobre la puntuación de texto. Use la agregación en su lugar.
Uso en ordenamiento
Los metadatos
"textScore"se colocan en orden descendente.Para usar en una operación de ordenación, establezca la expresión
{ $meta: "textScore" }en un nombre de campo arbitrario. El sistema de query ignora el nombre del campo.
Ordenar sin proyección
En la agregación, puedes ordenar los documentos resultantes por
{ $meta: "textScore" }sin tener que proyectar también eltextScore.En la búsqueda, puede ordenar los documentos resultantes por
{ $meta: "textScore" }sin tener que proyectar también eltextScore.
Ordenar con proyección
En la agregación, si se incluye la expresión
{ $meta: "textScore" }tanto en la proyección como en la clasificación, la proyección y la clasificación pueden tener diferentes nombres de campo para la expresión. El nombre del campo de ordenación es ignorado por el sistema de query.En encontrar, si se incluye la expresión
{ $meta: "textScore" }tanto en la proyección como en la ordenación, la proyección y la ordenación pueden utilizar diferentes nombres de campo para la expresión. El sistema de query no tiene en cuenta el nombre del campo en el ordenamiento.
Metadatos de clave de índice $meta: "indexKey" (Agregación y Búsqueda)
Uso
La expresión
{ $meta: "indexKey" }es solo para fines de depuración y no para lógica de aplicaciones.Se prefiere la expresión
{ $meta: "indexKey" }sobrecursor.returnKey().
Disponibilidad
En la agregación, la expresión
{ $meta: "indexKey" }se puede incluir en varias etapas que aceptan expresiones de agregación, como$project,$group$sortByCount, etc., pero no$sort. Sin embargo, con un pipeline de agregación, primero puedes proyectar la expresión{ $meta: "indexKey" }(como en un$project,$addFields, etc.), y luego, ordenar por ese campo en una etapa$sortposterior.En find, la expresión
{ $meta: "indexKey" }solo está disponible como parte del documento de proyección.
Valor de retorno
El valor devuelto depende de cómo la base de datos decide representar los valores en un índice y puede cambiar entre versiones. El valor representado puede no ser el valor real del campo.
El valor devuelto depende del plan de ejecución elegido por el sistema. Por ejemplo, si hay dos índices posibles que pueden utilizarse para responder a la query, entonces el valor de los metadatos "claveIndice" depende de qué índice se seleccione.
Si un índice no se utiliza, la expresión
{ $meta: "indexKey" }no devuelve un valor y el campo no se incluye como parte de la salida.