Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$meta

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$meta

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

Uma expressão $meta tem a seguinte sintaxe:

{ $meta: <metaDataKeyword> }

A expressão $meta pode especificar os seguintes valores como <metaDataKeyword>:

Palavra-chave
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 query $text, retornará uma pontuação nula.

"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.

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

    • Na aggregation, 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 na etapa $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 de query, a operação falhará.

  • 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.

  • A expressão $meta pode estar presente em uma inclusão ou uma projeção de exclusão.

  • 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 aggregation, 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 Pesquisa de texto no aggregation pipeline.

  • 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.

  • No achado, você pode classificar os documentos resultantes por { $meta: "textScore" } sem também precisar projetar o textScore.

    No MongoDB 4.2 e anterior, para usar a expressão { $meta: "textScore" } com sort() para uma operação de localização, você também deve incluir a mesma expressão na projeção.
  • Na aggregation, se você incluir a expressão { $meta: "textScore" } tanto na projeção quanto na classificação, a projeção e a classificação poderão ter nomes de campo diferentes para a expressão. O nome do campo na classificação é desconsiderado pelo sistema de query.

  • No achado, se você incluir a expressão { $meta: "textScore" } tanto na projeção quanto na classificação, a projeção e a classificação poderão ter nomes de campo diferentes para a expressão. O nome do campo na classificação é desconsiderado pelo sistema de query.

    No MongoDB 4.2 e versões anteriores, para incluir o { $meta: "textScore" } na projeção e na classificação de uma operação de localização, você deve especificar o mesmo nome de campo em ambos os lugares.
  • 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 usado, 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"} )

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" : NumberDecimal("12"), "quantity" : 2, "type": "apparel" },
{ "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type": "electronics" },
{ "item" : "abc", "price" : NumberDecimal("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 retorna os documentos correspondentes com sua chave de índice correspondente:

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

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

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"
}
← $mergeObjects (agregação)