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.

Construir um caminho de query

O parâmetro path é utilizado pelos operadores do MongoDB Search para especificar o campo ou campos a serem pesquisados. Pode conter:

  • Um string

  • Um array de strings

  • Uma especificação de multianalisador

  • Uma array contendo uma combinação de strings e especificações de vários analisadores

Observação

Nem todos os operadores podem usar todos os diferentes tipos de caminhos. Consulte a documentação de cada operador individual para obter detalhes sobre os tipos de caminho suportados.

Para pesquisar somente um único campo indexado, use uma string entre aspas no parâmetro path. O exemplo a seguir pesquisa um campo denominado description.

"path": "description"

Para pesquisar múltiplos campos indexados, utilize uma array de strings citadas no parâmetro path. Os documentos que correspondem a qualquer um dos campos especificados são incluídos no conjunto de resultados. O exemplo seguinte pesquisa os campos description e type.

"path": [ "description", "type" ]

Observação

A opção de caminho do multi está disponível somente para campos do tipo string.

Se sua definição de índice contiver um campo com vários analisadores, você poderá especificar qual deles usar. O parâmetro path pode pegar um objeto com os seguintes campos:

Campo
Descrição

value

O nome do campo a ser pesquisado.

multi

O nome do analisador alternativo especificado em um objeto multi em uma definição de índice. Para saber mais, consulte Multianalisador.

wildcard

O objeto que contém o caractere curinga * para corresponder a qualquer caractere no nome do campo a ser pesquisado, inclusive campos aninhados. Um caminho curinga:

  • Deve ser definido como um objeto.

  • Não pode conter a opção value ou multi.

  • Não pode conter vários caracteres curinga consecutivos, como **.

O caminho curinga só é aceito pelos seguintes operadores:

O caminho curinga também é aceito para destacar.

Na definição de índice a seguir, os campos chamados names e notes usam o padrão . Um campo denominado comments utiliza standard como seu analisador padrão e também especifica um multi denominado mySecondaryAnalyzer que utiliza o analisador lucene.whitespace.

{ "mappings": { "dynamic": false, "fields": { "names": { "type": "string", "analyzer": "lucene.standard" }, "notes": { "type": "string", "analyzer": "lucene.standard" }, "comments": { "type": "string", "analyzer": "lucene.standard", "multi": { "mySecondaryAnalyzer": { "analyzer": "lucene.whitespace", "type": "string" } } } } }}

O seguinte exemplo do path pesquisa o campo comments utilizando o multi denominado mySecondaryAnalyzer na definição do índice.

"path": { "value": "comments", "multi": "mySecondaryAnalyzer" }

Para procurar uma combinação de campos indexados e campos com vários analyzer, use uma array. O exemplo a seguir procurar os campos names e notes com o analisador padrão e o campo comments usando o multi denominado mySecondaryAnalyzer na definição do índice.

"path": [ "names", "notes", { "value": "comments", "multi": "mySecondaryAnalyzer" } ]

O exemplo path a seguir procurar todos os campos que contêm a letra n seguida por qualquer caractere e o campo comments usando o multi chamado mySecondaryAnalyzer na definição do índice.

"path": [{ "wildcard": "n*" }, { "value": "comments", "multi": "mySecondaryAnalyzer" }]

Os seguintes exemplos utilizam uma coleção denominada cars que tem os seguintes documentos:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Blue four-door sedan, lots of trunk space. Three to four passengers."}{ "_id" : 2, "type" : "coupe", "make" : "BMW", "description" : "Red two-door convertible, driver's-side airbag."}{ "_id" : 3, "type" : "SUV", "make" : "Ford", "description" : "Black four-door SUV, three rows of seats."}

Mapeamentos de campo estáticos permitem especificar como campos individuais dentro de uma coleção devem ser indexados e pesquisados.

A definição do índice para a coleção cars é a seguinte:

{ "mappings": { "dynamic": false, "fields": { "make": { "type": "string", "analyzer": "lucene.standard" }, "description": { "type": "string", "analyzer": "lucene.standard", "multi": { "simpleAnalyzer": { "analyzer": "lucene.simple", "type": "string" } } } } }}

A definição de índice anterior especifica que o campo make é indexado com o analisador padrão. O campo description utiliza o analisador standard por padrão, mas também pode utilizar o analisador simples especificando simpleAnalyzer com o parâmetro multi.

O exemplo a seguir procura o Ford de string no campo make :

db.cars.aggregate([ { $search: { "text": { "query": "Ford", "path": "make" } } }])

O exemplo anterior retorna o documento com _id: 3.

O exemplo a seguir usa um array de campos no parâmetro path para pesquisar a string blue no campo make ou description.

db.cars.aggregate([ { $search: { "text": { "query": "blue", "path": [ "make", "description" ] } } }])

A query anterior retorna o seguinte resultado:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Blue four-door sedan, lots of trunk space. Three to four passengers."}

O exemplo seguinte utiliza o multi denominado simpleAnalyzer na definição de índice, que utiliza o analisador simples.

A query pesquisa o campo description para a string driver.

db.cars.aggregate([ { $search: { "text": { "query": "driver", "path": { "value": "description", "multi": "simpleAnalyzer" } } } }])

A query anterior retorna o seguinte resultado:

{ "_id" : 2, "type" : "coupe", "make" : "BMW", "description" : "Red two-door convertible, driver's-side airbag."}

O analisador simples indexa driver's side airbag como [driver s side airbag], então ele corresponde em driver.

Por outro lado, os índices padrão do analisador driver's side airbag como [driver's side airbag], então ele corresponderia em driver's ou side mas não driver.

Suponha que o objeto multi na definição de índice para a coleção cars seja o seguinte:

"multi": { "simpleAnalyzer": { "analyzer": "lucene.whitespace", "type": "string" }}

O exemplo a seguir usa multi denominado simpleAnalyzer na definição do índice, que usa o analyzer de espaço em branco.

db.cars.aggregate([ { $search: { "text": { "query": "Three", "path": { "value": "description", "multi": "simpleAnalyzer" } } } }])

A query anterior retorna o seguinte resultado:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Blue four-door sedan, lots of trunk space. Three to four passengers."}

Para a query acima sobre o termo Three, o MongoDB Search retorna apenas documentos que correspondem ao termo Three e não three, pois o analisador de espaço em branco diferencia maiúsculas de minúsculas. Por outro lado, o analisador padrão não diferencia maiúsculas de minúsculas e retorna todos os documentos que correspondem ao termo na query na ordem em que estão listados na coleção.

Agora, considere a seguinte query:

db.cars.aggregate([ { $search: { "compound": { "should": [ { "text": { "path": "description", "query": "Three" } }, { "text": { "query": "Three", "path": { "value" : "description", "multi" : "simpleAnalyzer" }, score: { boost: { value: 2 }} } } ] } } }, { $project: { "_id": 0, "type": 1, "description": 1, "score": { "$meta": "searchScore" } } }])

A query anterior retorna os seguintes resultados:

{ "type" : "sedan", "description" : "Blue four-door sedan, lots of trunk space. Three to four passengers seats.", "score" : 1.1092689037322998}{ "type" : "SUV", "description" : "Black four-door SUV, three rows of seats.", "score" : 0.17812025547027588}

Para a query acima, o MongoDB Search retorna documentos tanto com Three quanto com three. No entanto, a pontuação do resultado com Three é maior porque, enquanto o documento com three foi combinado usando o analisador padrão, o documento com Three foi combinado tanto pelo analisador específico simpleAnalyzer quanto pelo analisador padrão.

O exemplo seguinte utiliza uma coleção denominada posts com os seguintes documentos:

{ "_id": 1, "username": "pinto", "post": { "date": "12-03-2018", "forum": "Tofu Recipes", "body": "Spicy Garlic Tofu cooks up crispy in 10 minutes or less. Serve with broccoli and rice for a delicious vegetarian meal." }}{ "_id": 2, "username": "paloma", "post": { "date": "12-08-2018", "forum": "Tofu Recipes", "body": "Crispy Tofu in Shiitake Broth has flavors of citrus and umami. Great as an appetizer or entree." }}

Os mapeamentos de campo dinâmicos permitem indexar todos os campos em uma coleção conforme necessário.

A definição do índice para a coleção posts é a seguinte:

{ "mappings": { "dynamic": true }}

A seguinte query de operador composto pesquisa o campo post.body para a string broccoli e também especifica que o campo não deve conter a string cauliflower.

db.posts.aggregate([ { $search: { "compound": { "must": { "text": { "query": "broccoli", "path": "post.body" } }, "mustNot": { "text": { "query": "cauliflower", "path": "post.body" } } } } }])

A query anterior retorna o documento com _id: 1, no qual o campo posts.body contém a string broccoli.

O exemplo seguinte utiliza uma coleção denominada cars, que tem os seguintes documentos:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Four-door sedan, lots of trunk space. Three to four passengers.", "warehouse" : [ { "inventory" : 3, "color" : "red" } ]}{ "_id" : 2, "type" : "coupe", "make" : "BMW", "description" : "Two-door convertible, driver's-side airbag.", "warehouse" : [ { "inventory" : 5, "color" : "black" } ]}{ "_id" : 3, "type" : "SUV", "make" : "Ford", "description" : "Four-door SUV, three rows of seats.", "warehouse" : [ { "inventory" : 7, "color" : "white" }, { "inventory" : 3, "color" : "red" } ]}

A definição do índice para a coleção cars é a seguinte:

{ "mappings": { "dynamic": true }}

As seguintes queries pesquisam os campos especificados utilizando o caractere curinga * para a string red.

A seguinte query pesquisa todos os campos para a string red.

db.cars.aggregate([ { "$search": { "phrase": { "path": { "wildcard": "*" }, "query": "red" } } }])

A query retorna os seguintes resultados:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Four-door sedan, lots of trunk space. Three to four passengers.", "warehouse" : [ { "inventory" : 3, "color" : "red" } ]}{ "_id" : 3, "type" : "SUV", "make" : "Ford", "description" : "Four-door SUV, three rows of seats.", "warehouse" : [ { "inventory" : 7, "color" : "white" }, { "inventory" : 3, "color" : "red" } ]}

A seguinte query pesquisa os campos aninhados dentro do campo warehouse para a string red.

db.cars.aggregate([ { "$search": { "text": { "path": { "wildcard": "warehouse.*" }, "query": "red" } } }])

A query retorna os seguintes resultados:

{ "_id" : 1, "type" : "sedan", "make" : "Toyota", "description" : "Four-door sedan, lots of trunk space. Three to four passengers.", "warehouse" : [ { "inventory" : 3, "color" : "red" } ]}{ "_id" : 3, "type" : "SUV", "make" : "Ford", "description" : "Four-door SUV, three rows of seats.", "warehouse" : [ { "inventory" : 7, "color" : "white" }, { "inventory" : 3, "color" : "red" } ]}