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

Executar queries de pesquisa do MongoDB

Neste guia, você aprenderá a usar o driver Scala para executar query de pesquisa do MongoDB Search em uma coleção. O MongoDB Search permite que você realize pesquisas de texto completo em suas coleções. Os índices do MongoDB Search especificam o comportamento da pesquisa e quais campos indexar.

Para saber como criar e gerenciar índices do MongoDB Search usando o driver Scala, consulte o guia Índices do MongoDB Search e do MongoDB Vector Search.

Os exemplos neste guia utilizam a coleção do movies no banco de dados do sample_mflix a partir do conjunto de dados de amostra do Atlas. Para **aprender** como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte Introdução ao Atlas.

Observação

O MongoDB Search está disponível nas seguintes implantações:

  • MongoDB Atlas v4.2 ou posterior

  • MongoDB Community Edition v8.2 ou posterior

Sua coleção deve ter um índice do MongoDB Search para executar query de pesquisa do MongoDB Search. Para saber como criar um índice do MongoDB Search, consulte o guia Índice do MongoDB Search e do MongoDB Vector Search.

Para realizar uma pesquisa de texto completo, chame o método aggregate() com um estágio de pipeline $search. O driver Scala fornece o método assistente Aggregates.search() para criar este estágio. O método search() requer os seguintes argumentos:

  • SearchOperator instância que especifica o campo e o texto a serem pesquisados

  • SearchOptions instância que especifica opções para personalizar a pesquisa, incluindo o nome do índice de pesquisa do MongoDB a ser usado

O exemplo a seguir pesquisa o campo title para o texto "Alabama" e projeta apenas o campo _id, que está incluído por padrão, e o campo title dos documentos correspondentes:

val operator = SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")
val options = searchOptions().index("<search index name>")
val pipeline = Seq(
Aggregates.search(operator, options),
Aggregates.project(Projections.include("title"))
)
try {
Await
.result(collection.aggregate(pipeline).toFuture(), 20.seconds)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Dica

Para ver tutoriais do MongoDB Search na documentação do Atlas, consulte Executar query de pesquisa do Atlas.

Observação

Os metadados do MongoDB Search estão disponíveis nas seguintes implantações:

  • MongoDB Atlas v4.4.11 ou posterior

  • MongoDB Community Edition v8.2 ou posterior

Use o método assistente Aggregates.searchMeta() para recuperar apenas os metadados de uma query de pesquisa do MongoDB sem retornar os resultados da pesquisa. O exemplo a seguir retorna metadados para uma query que pesquisa o campo year para valores próximos a 2010:

try {
Await
.result(
collection.aggregate(Seq(
Aggregates.searchMeta(
SearchOperator.near(2010, 1, SearchPath.fieldPath("year")))
)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"count": {"lowerBound": 35}}

O driver Scala fornece métodos de assistente para os seguintes operadores:

Operador
Descrição

Executa uma pesquisa por uma palavra ou frase que contém uma sequência de caracteres de uma string de entrada incompleta.

Combina dois ou mais operadores em uma única query.

Verifica se um campo corresponde a um valor que você especificou. Mapeia para os métodos equals() e equalsNull().

Testa se existe um caminho para um nome de campo indexado especificado em um documento.

Executa uma pesquisa por uma array de valores de número BSON, data, boolean, ObjectId, uuid ou string no caminho fornecido e retorna documentos em que o valor do campo é igual a qualquer valor na array especificada.

Retorna documentos semelhantes aos documentos de entrada.

Suporta a consulta e pontuação de valores numéricos, de data e de ponto GeoJSON .

Executa uma pesquisa de documentos contendo uma sequência ordenada de termos usando o analisador especificado na configuração do índice.

Suporta a realização de query de uma combinação de campos e valores indexados.

Suporta a consulta e pontuação de valores numéricos, de data e de cadeia de caracteres. Mapeia para os métodos numberRange() e dateRange().

Interpreta o campo de query como uma expressão regular.

Executa uma pesquisa de texto completo usando o analisador especificado na configuração do índice.

Habilita queries que usam caracteres especiais na string de pesquisa que podem corresponder a qualquer caractere.

Antes de executar este exemplo, você deve criar um índice de pesquisa MongoDB na coleção movies que tem a seguinte definição:

{
"mappings": {
"dynamic": true,
"fields": {
"title": {
"analyzer": "lucene.keyword",
"type": "string"
},
"genres": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

Para saber mais sobre a criação de índices do MongoDB Search, consulte o guia MongoDB Search e MongoDB Vector Search Indexes.

O seguinte código cria um estágio $search que tem as seguintes especificações:

  • Verifica se a array genres inclui "Comedy"

  • Pesquisa no campo fullplot a frase "new york"

  • Corresponde a year valores entre 1950 e 2000, inclusive

  • Pesquisa valores title que começam com o termo "Love"

val searchStage = Aggregates.search(
SearchOperator.compound()
.must(
Iterable(
SearchOperator.in(fieldPath("genres"), List("Comedy")),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard("Love *", fieldPath("title")),
).asJava
)
)
val projectStage = Aggregates.project(
Projections.include("title", "year", "genres"))
try {
Await
.result(
collection.aggregate(Seq(searchStage, projectStage)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_id": ..., "genres": ["Comedy", "Romance"],
"title": "Love at First Bite", "year": 1979}
{"_id": ..., "genres": ["Comedy", "Drama"],
"title": "Love Affair", "year": 1994}

Para saber mais sobre os métodos assistente de pesquisa do MongoDB, consulte a referência da interface SearchOperator na documentação da Core API driver.

Para saber mais sobre o MongoDB Search, consulte Visão geral do MongoDB Search na documentação do Atlas.

Para saber mais sobre os métodos e tipos discutidos neste guia, consulte a seguinte documentação da API: