Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$meta (operador de expressão )

$meta

Retorna os metadados associados a um documento, por exemplo, "textScore" ao executar pesquisa de texto.

A $meta expression has the following syntax:

{ $meta: <metaDataKeyword> }

The $meta expression can specify the following values as the <metaDataKeyword>:

Keyword
Descrição

"textScore"

Retorna a pontuação associada à query $text correspondente a cada documento correspondente. A pontuação de texto indica quão bem o documento correspondeu ao termo ou termos de pesquisa.

{ $meta: "textScore" } deve ser usado em conjunto com uma query $text.

Em versões anteriores, se não usado em conjunto com uma consulta $text, retornará uma pontuação nula.

$text provides text query capabilities for self-managed (non-Atlas) deployments. For data hosted on MongoDB Atlas, MongoDB offers an improved full-text query solution, Atlas Search.

"indexKey"

Retorna uma chave de índice para o documento se um índice não texto for usado. A expressão { $meta: "indexKey" } é somente para fins de depuração e não para lógica de aplicativo, e é preferida em comparação com cursor.returnKey().

O MongoDB Atlas Search fornece palavras-chave $meta adicionais, como:

Consulte a documentação do Atlas Search para obter detalhes.

Importante

As seguintes palavras-chave $meta não são aceitas na API Estável V1:

  • "textScore"

  • "indexKey"

  • "searchScore"

  • "searchHighlights" (Disponível a partir do MongoDB 7.0.5 e 6.0.13)

  • "searchSequenceToken"

  • "searchScoreDetails"

  • A expressão { $meta: "textScore" } deve ser usada em conjunto com $text. Por exemplo:

    • Na agregação, você deve especificar um estágio $match com uma query $text no pipeline para usar a expressão { $meta: "textScore" } nos estágios posteriores. Se você não especificar a query $text no estágio $match, a operação falhará.

    • No achado, você deve especificar o operador $text no predicado de query para usar { $meta: "textScore" }. Se você não especificar o operador $text no predicado da consulta, a operação falhará.

    Observação

    $text provides text query capabilities for self-managed (non-Atlas) deployments. For data hosted on MongoDB Atlas, MongoDB offers an improved full-text query solution, Atlas Search.

  • Na aggregation, a expressão { $meta: "textScore" } pode ser incluída em vários estágios que aceitam expressões de aggregation, como $project, $group $sort etc.

  • No achado, a expressão { $meta: "textScore" } pode ser incluída na projeção e em sort().

  • A expressão { $meta: "textScore" } pode fazer parte do documento de projeção para incluir os metadados de pontuação de texto.

  • The $meta expression can be present in either an inclusion or an exclusion projection.

  • Se você definir a expressão para um nome de campo que já existe no documento, o valor de metadados projetado substituirá o valor existente.

  • Na agregação, após um estágio que gera um campo com o valor da pontuação de texto, você poderá especificar uma condição de query ou operar no campo em estágios subsequentes. Por exemplo, consulte $text no Pipeline de agregação em implantações autogerenciadas.

  • No achado, você não pode especificar uma condição de query na pontuação de texto. Em vez disso, use aggregation.

  • A expressão { $meta: "textScore" } pode ser usada como parte de uma operação de classificação para classificar por metadados da pontuação de texto; ou seja,

    • Na aggregation, $sort estágio.

    • No achado, método sort().

  • Os metadados "textScore" são classificados em ordem decrescente.

  • Para usar em uma operação de classificação, defina a expressão { $meta: "textScore" } como um nome de campo arbitrário. O nome do campo é desconsiderado pelo sistema de query.

  • Na aggregation, você pode classificar os documentos resultantes por { $meta: "textScore" } sem também ter que projetar o textScore.

  • Na operação find, você pode ordenar os documentos resultantes por { $meta: "textScore" } sem precisar projetar também o textScore.

  • In aggregation, if you include the { $meta: "textScore" } expression in both the projection and sort, the projection and sort can have different field names for the expression. The field name in the sort is disregarded by the query system.

  • In find, if you include the { $meta: "textScore" } expression in both the projection and sort, the projection and sort can have different field names for the expression. The field name in the sort is disregarded by the query system.

  • A expressão { $meta: "indexKey" } serve apenas para fins de depuração e não para lógica de aplicativo.

  • A expressão { $meta: "indexKey" } é preferível a cursor.returnKey().

  • No aggregation, a expressão { $meta: "indexKey" } pode ser incluída em vários estágios que aceitam expressões de aggregation, como $project, $group $sortByCount etc., mas não $sort. No entanto, com um aggregation pipeline, você pode primeiro projetar a expressão { $meta: "indexKey" } (como em um $project, $addFields etc.) e, em seguida, classificar por esse campo em um estágio $sort subsequente.

  • No achado, a expressão { $meta: "indexKey" } só está disponível como parte do documento de projeção .

  • O valor retornado depende de como o banco de dados decide representar valores em um índice e pode mudar entre versões. O valor representado pode não ser o valor real do campo.

  • O valor retornado depende do plano de execução escolhido pelo sistema. Por exemplo, se houver dois índices possíveis que podem ser usados para responder à query, o valor dos metadados "indexKey" dependerá de qual índice for selecionado.

  • Se um índice não for utilizado, a expressão { $meta: "indexKey" } não retornará um valor e o campo não será incluído como parte da saída.

Cria uma collection articles com os seguintes documentos:

db.articles.insertMany([
{ "_id" : 1, "title" : "cakes and ale" },
{ "_id" : 2, "title" : "more cakes" },
{ "_id" : 3, "title" : "bread" },
{ "_id" : 4, "title" : "some cakes" },
{ "_id" : 5, "title" : "two cakes to go" },
{ "_id" : 6, "title" : "pie" }
])

Crie um índice de texto no campo title:

db.articles.createIndex( { title: "text"} )

The following aggregation operation performs a text search and uses the $meta operator to group by the text search score:

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake" } } },
{ $group: { _id: { $meta: "textScore" }, count: { $sum: 1 } } }
]
)

A operação retorna os seguintes resultados:

{ "_id" : 0.75, "count" : 1 }
{ "_id" : 0.6666666666666666, "count" : 1 }
{ "_id" : 1, "count" : 2 }

Para mais exemplos, consulte $text no pipeline de agregação em implantações autogerenciadas.

Observação

A expressão { $meta: "indexKey" } serve apenas para fins de depuração e não para lógica de aplicativo. O MongoDB retorna o valor associado ao índice escolhido pelo sistema de query. Ele pode escolher um índice diferente após a execução subsequente.

Para o índice selecionado, o valor retornado depende de como o banco de dados decide representar valores em um índice e pode mudar entre versões. O valor representado pode não ser o valor real do campo.

Cria uma collection orders com os seguintes documentos:

db.orders.insertMany([
{ "item" : "abc", "price" : Decimal128("12"), "quantity" : 2, "type": "apparel" },
{ "item" : "jkl", "price" : Decimal128("20"), "quantity" : 1, "type": "electronics" },
{ "item" : "abc", "price" : Decimal128("10"), "quantity" : 5, "type": "apparel" }
])

Crie o seguinte índice composto nos campos type e item:

db.orders.createIndex( { type: 1, item: 1 } )

A operação de agregação a seguir localiza todos os documentos com type igual a apparel e usa o operador $meta para incluir o valor da chave de índice para o documento correspondente, caso um índice tenha sido usado:

db.orders.aggregate(
[
{ $match: { type: "apparel" } },
{ $addFields: { idxKey: { $meta: "indexKey" } } }
]
)

A operação retorna os documentos correspondentes com sua chave de índice correspondente:

{
"_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcde"),
"item" : "abc",
"price" : Decimal128("12"),
"quantity" : 2,
"type" : "apparel",
"idxKey" : { "type" : "apparel", "item" : "abc" }
}
{
"_id" : ObjectId("5e98a33ceaf5e9dcf2b8dce0"),
"item" : "abc",
"price" : Decimal128("10"),
"quantity" : 5,
"type" : "apparel",
"idxKey" : { "type" : "apparel", "item" : "abc" }
}

Se o índice não for usado, { $meta: "indexKey" } não retornará nada.

Por exemplo, a operação a seguir não usa um índice, pois não existe nenhum índice no campo price compatível com a condição de correspondência:

db.orders.aggregate(
[
{ $match: { price: { $gte: Decimal128("10") } } },
{ $addFields: { idxKey: { $meta: "indexKey" } } }
]
)

A operação retorna os documentos correspondentes sem o campo idxKey:

{
"_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcde"),
"item" : "abc",
"price" : NumberDecimal("12"),
"quantity" : 2,
"type" : "apparel"
}
{
"_id" : ObjectId("5e98a33ceaf5e9dcf2b8dcdf"),
"item" : "jkl",
"price" : NumberDecimal("20"),
"quantity" : 1,
"type" : "electronics"
}
{
"_id" : ObjectId("5e98a33ceaf5e9dcf2b8dce0"),
"item" : "abc",
"price" : NumberDecimal("10"),
"quantity" : 5,
"type" : "apparel"
}
Avalie esta página