Visão geral
Neste guia, você aprenderá a usar o construtor Search para criar um estágio de pipeline de agregação $search com o driver .NET/C# do MongoDB.
Para saber mais sobre o estágio de pipeline $search, consulte $search.
Observação
Disponível apenas no Atlas para MongoDB v4.2 e posterior
O operador de pipeline de agregação $search está disponível somente para coleções hospedadas em clusters do MongoDB Atlas que executam o MongoDB v4.2 ou posterior que são abrangidos por um índice de pesquisa do MongoDB. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do MongoDB pesquisa.
Dados de amostra
Os exemplos neste guia usam a coleção movies do banco de dados sample_mflix . Os documentos desta coleção contêm informações sobre filmes, incluindo título, trama, gênero e classificações. A seguinte classe Movie modela os documentos nesta coleção:
[] public class Movie { [] public ObjectId Id { get; set; } public string Title { get; set; } = null!; public string Plot { get; set; } = null!; public string[] Genres { get; set; } = null!; public int Year { get; set; } public string Rated { get; set; } = null!; public Imdb Imdb { get; set; } = null!; [] public float[] PlotEmbedding { get; set; } = null!; public double Score { get; set; } [] [] public SearchScoreDetails ScoreDetails { get; set; } = null!; [] public string PaginationToken { get; set; } = null!; }
A classe Movie faz referência à seguinte classe Imdb, que modela o campo imdb aninhado em cada documento:
[] public class Imdb { public double Rating { get; set; } public int Votes { get; set; } public int Id { get; set; } }
Observação
Nomes de campo camel-case em dados de amostra
Os documentos na coleção movies usam a convenção de nomenclatura de camelo. Os exemplos neste guia usam um ConventionPack para desserializar os campos na coleção em maiúsculas e minúsculas Pascal e mapeá-los para as propriedades na classe Movie .
Para saber mais sobre serialização personalizada, consulte Serialização personalizada.
Alguns exemplos deste guia usam coleções adicionais e classes de modelo, que são introduzidas nas seções relevantes. Todas as coleções são dos conjuntos de dados de amostra fornecidos pelo Atlas. Consulte Início Rápido para saber como criar um cluster MongoDB gratuito e carregar esses dados de amostra.
Crie um índice de pesquisa do MongoDB
Antes de executar uma pesquisa em uma coleção do Atlas, primeiro você deve criar um índice do Atlas Search na coleção. Um índice de pesquisa do MongoDB é uma estrutura de dados que categoriza os dados em um formato pesquisável.
Para aprender como criar um índice de pesquisa MongoDB, veja o Criar um índice de pesquisa MongoDB guia Atlas.
Operadores de pesquisa do MongoDB
A classe Search contém métodos que você pode utilizar para executar operações do $search. Para obter uma lista completa das operadoras $search disponíveis, consulte o guia do Atlas de Operadoras e Coletoras.
Autocompletar
Use o método Autocomplete() para pesquisar uma palavra ou frase que contenha uma sequência de caracteres de uma string de entrada incompleta.
O exemplo seguinte executa uma consulta de preenchimento automático no campo title para texto que começa com a string "Gravity":
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Autocomplete(m => m.Title, "Gravity"), indexName: "movietitles") .ToList();
... { "_id" : ObjectId("..."), "title" : "Gravity", "plot" : "...", "genres" : ["Drama", "Sci-Fi", "Thriller"], "year" : 2013, "rated" : "PG-13", "imdb" : { "rating" : 7.7, "votes" : "...", "id" : "..." } } ...
Observação
Índice para queries de preenchimento automático
Você deve criar um índice de pesquisa MongoDB que ofereça suporte ao preenchimento automático para executar queries com preenchimento automático com êxito. Para saber mais, consulte Como criar índice de campos para preenchimento automático na documentação do Atlas.
Após criar o índice do MongoDB Search, você deve passar o nome do índice para o método Autocomplete(), como mostrado no exemplo anterior.
Para saber mais sobre o operador autocomplete , consulte o guia do Atlas de preenchimento automático.
composto
Use o método Compound() para combinar dois ou mais operadores em uma única pesquisa.
O exemplo seguinte pesquisa a coleção movies por quaisquer documentos que correspondam a todos os seguintes critérios:
O campo
imdb.ratingexiste no documentoO valor do campo
ratednão é"G"O campo
yeartem um valor superior a 2000
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Compound() .Must(Builders<Movie>.Search.Exists(m => m.Imdb.Rating)) .MustNot(Builders<Movie>.Search.Equals(m => m.Rated, "G")) .Must(Builders<Movie>.Search.Range(m => m.Year, SearchRangeBuilder.Gt(2000)))) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Dark Knight", "plot" : "...", "genres" : ["Action", "Crime", "Drama"], "year" : 2008, "rated" : "PG-13", "imdb" : { "rating" : 9.0, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Inception", "plot" : "...", "genres" : ["Action", "Adventure", "Sci-Fi"], "year" : 2010, "rated" : "PG-13", "imdb" : { "rating" : 8.8, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador compound, consulte o guia Atlas composto.
documento incorporado
Use o método EmbeddedDocument() para realizar operações de pesquisa em documentos dentro do valor da array de um campo.
Observação
Para usar o Atlas Search em documentos incorporados, você deve criar um índice embeddedDocument no campo de array.
Para saber como definir um índice embeddedDocument, consulte Definir o índice para o tipo embeddedDocument na documentação do Atlas.
Este exemplo utiliza a coleção restaurants do banco de dados sample_restaurants. As seguintes classes modelam os documentos nessa coleção:
[] public class Restaurant { [] public ObjectId Id { get; set; } public string Name { get; set; } = null!; public string Cuisine { get; set; } = null!; public string Borough { get; set; } = null!; public List<GradeEntry> Grades { get; set; } = null!; }
[] public class GradeEntry { public string Grade { get; set; } = null!; public int? Score { get; set; } }
O exemplo a seguir pesquisa nessa coleção quaisquer restaurantes cuja array grades contenha uma entrada com um campo grade de "A":
var result = restaurantsCollection.Aggregate() .Search(Builders<Restaurant>.Search.EmbeddedDocument( r => r.Grades, Builders<GradeEntry>.Search.Equals(g => g.Grade, "A") ), indexName: "restaurantsembedded").ToList();
... { "_id" : ObjectId("..."), "name" : "Riviera Caterer", "cuisine" : "American", "borough" : "Brooklyn", "grades" : [{ "grade" : "A", "score" : 5 }, { "grade" : "B", "score" : 23 }] } ...
Para saber mais sobre o operador embeddedDocument, consulte o guia do Atlas embeddedDocument.
Iguais
Utilize o método Equals() para verificar se um campo corresponde a um valor especificado.
O exemplo a seguir pesquisa a coleção movies para quaisquer documentos nos quais o valor do campo year é 2000:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Equals(m => m.Year, 2000)) .ToList();
... { "_id" : ObjectId("..."), "title" : "Gladiator", "plot" : "...", "genres" : ["Action", "Adventure", "Drama"], "year" : 2000, "rated" : "R", "imdb" : { "rating" : 8.5, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Cast Away", "plot" : "...", "genres" : ["Adventure", "Drama", "Romance"], "year" : 2000, "rated" : "PG-13", "imdb" : { "rating" : 7.8, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador equals, consulte o guia equals do Atlas.
Existe
Use o método Exists() para pesquisar documentos nos quais existe um nome de campo indexado especificado. Se o campo especificado existir, mas não estiver indexado, o documento não será incluído com o conjunto de resultados.
O exemplo a seguir pesquisa na coleção movies quaisquer documentos nos quais o campo imdb.rating exista:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Exists(m => m.Imdb.Rating)) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Godfather", "plot" : "...", "genres" : ["Crime", "Drama"], "year" : 1972, "rated" : "R", "imdb" : { "rating" : 9.2, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "The Shawshank Redemption", "plot" : "...", "genres" : ["Drama"], "year" : 1994, "rated" : "R", "imdb" : { "rating" : 9.3, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador exists, consulte o guia do Atlas existente.
GeoShape
Use o método GeoShape() para pesquisar documentos em relação a uma determinada geometria. Ao especificar as coordenadas a serem pesquisadas, a longitude deve ser especificada primeiro e, em seguida, a latitude. Os valores de longitude podem estar entre -180 e 180. Os valores de latitude podem estar entre -90 e 90.
Observação
A Pesquisa do MongoDB não é compatível com o seguinte:
Sistema de Referência de Coordenadas Não Padrão (CRS)
Sistema de coordenadas Planar XY (bidimensional)
Notação de Ponto de pares de coordenadas (pointFieldName: [12, 34])
Este exemplo utiliza a coleção theaters do banco de dados sample_mflix. As seguintes classes modelam os documentos nessa coleção:
[] public class Theater { [] public ObjectId Id { get; set; } public int TheaterId { get; set; } public TheaterLocation Location { get; set; } = null!; }
[] public class TheaterLocation { [] public GeoJsonPoint<GeoJson2DGeographicCoordinates> Geo { get; set; } = null!; }
O exemplo a seguir pesquisa nessa coleção todos os documentos em que as coordenadas no campo location.geo interseccionam com um polígono especificado na área de Minnealis, NV:
GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[] { new(-93.5, 44.7), new(-93.5, 45.0), new(-93.0, 45.0), new(-93.0, 44.7), new(-93.5, 44.7), }))); var result = theatersCollection.Aggregate() .Search(Builders<Theater>.Search.GeoShape( t => t.Location.Geo, GeoShapeRelation.Intersects, searchArea), indexName: "theatersgeo") .ToList();
... { "_id" : ObjectId("..."), "theaterId" : 1000, "location" : { "geo" : { "type" : "Point", "coordinates" : [-93.24565, 44.85466] } } } ...
Para saber mais sobre o operador geoShape, consulte o guia geoShape do Atlas.
GeoWithin
Use o método GeoWithin() para pesquisar documentos nos quais as coordenadas de seu campo GeoJSON especificado estão dentro de uma determinada geometria. Você pode pesquisar pontos que estão dentro de:
Círculo
Caixa delimitadora
Polígono
Ao especificar as coordenadas a serem pesquisadas, a longitude deve ser especificada primeiro, seguida da latitude. Os valores de longitude podem estar entre -180 e 180, inclusive. Os valores de latitude podem estar entre -90 e 90, inclusive.
Observação
A Pesquisa do MongoDB não é compatível com o seguinte:
Sistema de Referência de Coordenadas Não Padrão (CRS)
Sistema de coordenadas Planar XY (bidimensional)
Notação de Ponto de pares de coordenadas (pointFieldName: [12, 34])
O exemplo a seguir pesquisa na coleção theaters todos os documentos em que as coordenadas no campo location.geo estejam dentro de um determinado polígono:
GeoJsonPolygon<GeoJson2DGeographicCoordinates> searchArea = new(new(new(new GeoJson2DGeographicCoordinates[] { new(-94.0, 44.5), new(-94.0, 45.2), new(-92.5, 45.2), new(-92.5, 44.5), new(-94.0, 44.5), }))); var result = theatersCollection.Aggregate() .Search(Builders<Theater>.Search.GeoWithin(t => t.Location.Geo, searchArea), indexName: "theatersgeo") .ToList();
... { "_id" : ObjectId("..."), "theaterId" : 1000, "location" : { "geo" : { "type" : "Point", "coordinates" : [-93.24565, 44.85466] } } } ...
Para saber mais sobre o operador geoWithin , consulte o guia geoWithin Atlas.
In
Use o método In() para pesquisar documentos com valores de campo que correspondam a uma lista de valores especificados.
O exemplo a seguir pesquisa a coleção movies em busca de documentos que tenham uma array genres que contenha "Action" ou "Comedy":
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.In(m => m.Genres, new[] { "Action", "Comedy" })) .ToList();
... { "_id" : ObjectId("..."), "title" : "Home Alone", "plot" : "...", "genres" : ["Comedy", "Family"], "year" : 1990, "rated" : "PG", "imdb" : { "rating" : 7.4, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Die Hard", "plot" : "...", "genres" : ["Action", "Thriller"], "year" : 1988, "rated" : "R", "imdb" : { "rating" : 8.2, "votes" : "...", "id" : "..." } } ...
MoreLikeThis
Use o método MoreLikeThis() para pesquisar documentos semelhantes a um documento de entrada.
Este exemplo usa a seguinte classe para especificar o documento de entrada para a pesquisa:
public class MovieSearch { public string Plot { get; set; } = null!; }
O exemplo a seguir pesquisa a coleção movies em busca de documentos semelhantes a um objeto no qual o valor do campo plot é "time travel":
var searchDocument = new MovieSearch() { Plot = "time travel", }; var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.MoreLikeThis(searchDocument)) .ToList();
... { "_id" : ObjectId("..."), "title" : "Thrill Seekers", "plot" : "...", "genres" : ["Action", "Sci-Fi", "Thriller"], "year" : 1999, "rated" : "...", "imdb" : { "rating" : "...", "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "About Time", "plot" : "...", "genres" : ["Drama", "Fantasy", "Romance"], "year" : 2013, "rated" : "R", "imdb" : { "rating" : 7.8, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador do moreLikeThis, consulte o guia do Atlas moreLikeThis .
Aproximar
Use o método Near() para pesquisar documentos nos quais um campo especificado está próximo de um determinado valor. Você pode realizar a pesquisa em:
Um campo de número
Um campo de data
Um ponto geográfico
O exemplo a seguir pesquisa a coleção movies em busca de documentos nos quais o valor do campo imdb.rating esteja próximo 8.5. Os documentos são retornados em ordem com base na proximidade do valor de 8.5:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Near(m => m.Imdb.Rating, 8.5, 1)) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Dark Knight", "plot" : "...", "genres" : ["Action", "Crime", "Drama"], "year" : 2008, "rated" : "PG-13", "imdb" : { "rating" : 9.0, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "The Godfather", "plot" : "...", "genres" : ["Crime", "Drama"], "year" : 1972, "rated" : "R", "imdb" : { "rating" : 9.2, "votes" : "...", "id" : "..." } } ...
To learn more about the near operator, see the near Atlas guide.
Frase
Use o método Phrase() para pesquisar documentos nos quais um campo especificado contém uma string de entrada.
O exemplo a seguir pesquisa a coleção movies em busca de documentos nos quais o campo plot contenha a frase "time travel":
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Phrase(m => m.Plot, "time travel")) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Time Traveler's Wife", "plot" : "...", "genres" : ["Drama", "Fantasy", "Romance"], "year" : 2009, "rated" : "PG-13", "imdb" : { "rating" : 7.1, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Safety Not Guaranteed", "plot" : "...", "genres" : ["Comedy", "Drama", "Romance"], "year" : 2012, "rated" : "R", "imdb" : { "rating" : 7, "votes" : "...", "id" : "..." } } ...
Você também pode pesquisar na coleção documentos que contenham "time travel" ou "space adventure" no campo plot :
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Phrase(m => m.Plot, new List<string>() { "time travel", "space adventure" })) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Time Traveler's Wife", "plot" : "...", "genres" : ["Drama", "Fantasy", "Romance"], "year" : 2009, "rated" : "PG-13", "imdb" : { "rating" : 7.1, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Safety Not Guaranteed", "plot" : "...", "genres" : ["Comedy", "Drama", "Romance"], "year" : 2012, "rated" : "R", "imdb" : { "rating" : 7, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador phrase , consulte a frase Guia do Atlas.
QueryString
Use o método QueryString() para pesquisar documentos usando uma string com os seguintes operadores e delimitadores:
ANDORNOT()
O exemplo a seguir pesquisa na coleção movies documentos nos quais o valor do campo plot corresponda a cada um dos seguintes critérios:
Contém a string
"time"ou a string"space"Não contém a string
"comedy"
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.QueryString(m => m.Plot, "(time OR space) AND NOT comedy")) .ToList();
... { "_id" : ObjectId("..."), "title" : "Interstellar", "plot" : "...", "genres" : ["Adventure", "Drama", "Sci-Fi"], "year" : 2014, "rated" : "PG-13", "imdb" : { "rating" : 8.7, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Tomorrowland", "plot" : "...", "genres" : ["Action", "Adventure", "Family"], "year" : 2015, "rated" : "PG", "imdb" : { "rating" : 6.6, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador queryString, consulte o guia queryString do Atlas.
faixa
Use o método Range() para pesquisar documentos nos quais o valor de um campo especificado esteja dentro de um determinado intervalo numérico ou de datas.
O exemplo a seguir pesquisa na coleção movies todos os documentos com um valor year maior que 2000 e menor que 2010:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search .Range(m => m.Year, SearchRangeBuilder.Gt(2000).Lt(2010))) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Dark Knight", "plot" : "...", "genres" : ["Action", "Crime", "Drama"], "year" : 2008, "rated" : "PG-13", "imdb" : { "rating" : 9.0, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "The Departed", "plot" : "...", "genres" : ["Crime", "Drama", "Thriller"], "year" : 2006, "rated" : "R", "imdb" : { "rating" : 8.5, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador range, consulte o guia Atlas de intervalos.
expressão regular
Use o método Regex() para pesquisar documentos usando uma expressão regular.
O exemplo seguinte pesquisa a coleção movies para documentos em que o valor do campo title contém exatamente seis letras:
var regex = "[A-Za-z]{6}"; var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Regex(m => m.Title, regex, allowAnalyzedField: true)) .ToList();
... { "_id" : ObjectId("..."), "title" : "Gandhi", "plot" : "...", "genres" : ["Biography", "Drama", "History"], "year" : 1982, "rated" : "PG", "imdb" : { "rating" : 8.0, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "Batman", "plot" : "...", "genres" : ["Action", "Adventure"], "year" : 1989, "rated" : "PG-13", "imdb" : { "rating" : 7.5, "votes" : "...", "id" : "..." } } ...
Observação
Por padrão, o operador regex não pode ser executado em um campo analisado. Você pode permitir que ele seja executado em um campo analisado definindo a opção allowAnalyzedField como "true", da seguinte forma:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Regex(m => m.Title, regex, allowAnalyzedField: true)) .ToList();
Definir a opção allowAnalyzedField como verdadeiro pode levar a resultados de pesquisa inesperados. Para saber mais, consulte Comportamento regex.
Para saber mais sobre o operador regex , consulte o guia regex Atlas.
Espanha
Utilize o método Span() para pesquisar correspondências de pesquisa de texto dentro de regiões de um campo. Você pode usar este método para encontrar strings próximas umas das outras com graus de precisão especificados.
Observação
O operador span é mais intensivo em termos de computação do que os outros operadores porque as queries devem manter o controle das informações de posição.
O exemplo a seguir pesquisa na coleção movies os documentos em que o valor do campo plot contém as strings "time" e "travel" dentro de uma palavra de cada:
var searchTerms = new[] { Builders<Movie>.SearchSpan.Term(m => m.Plot, "time"), Builders<Movie>.SearchSpan.Term(m => m.Plot, "travel") }; var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Span(Builders<Movie>.SearchSpan.Near(searchTerms, 1))) .ToList();
... { "_id" : ObjectId("..."), "title" : "The Time Traveler's Wife", "plot" : "...", "genres" : ["Drama", "Fantasy", "Romance"], "year" : 2009, "rated" : "PG-13", "imdb" : { "rating" : 7.1, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "About Time", "plot" : "...", "genres" : ["Drama", "Fantasy", "Romance"], "year" : 2013, "rated" : "R", "imdb" : { "rating" : 7.8, "votes" : "...", "id" : "..." } } ...
Para saber mais sobre o operador span , consulte o guia do Atlas de extensão .
Text
Use o método Text() para fazer uma pesquisa de uma determinada string ou array de strings em um documento. Se houver vários termos em uma determinada string, o MongoDB pesquisa também procurará uma correspondência para cada termo na string separadamente.
O exemplo a seguir pesquisa a coleção movies em busca de documentos nos quais o valor do campo plot contém a string "secret agent":
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Text(m => m.Plot, "secret agent")) .ToList();
... { "_id" : ObjectId("..."), "title" : "Spy Kids", "plot" : "...", "genres" : ["Action", "Adventure", "Comedy"], "year" : 2001, "rated" : "PG", "imdb" : { "rating" : 5.4, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "The Spy Who Loved Me", "plot" : "...", "genres" : ["Action", "Adventure", "Thriller"], "year" : 1977, "rated" : "PG", "imdb" : { "rating" : 7.1, "votes" : "...", "id" : "..." } } ...
Dica
Se a string de pesquisa contiver vários termos, o método também buscará uma correspondência para cada termo na string separadamente.
Para saber mais sobre o operador text, consulte o guia texto do Atlas.
Curinga
Use o método Wildcard() para pesquisar documentos usando caracteres especiais em sua sequência de pesquisa que podem corresponder a qualquer caractere. Você pode usar os seguintes caracteres em sua pesquisa:
Personagem | Descrição |
|---|---|
| Corresponde a qualquer caractere único |
| Corresponde a 0 ou mais caracteres |
| Caractere de escape |
O exemplo a seguir pesquisa documentos nos quais o valor do campo title contém a string "Amer" seguida por qualquer outro caractere:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Wildcard(m => m.Title, "Amer*", allowAnalyzedField: true)) .ToList();
... { "_id" : ObjectId("..."), "title" : "American Beauty", "plot" : "...", "genres" : ["Drama"], "year" : 1999, "rated" : "R", "imdb" : { "rating" : 8.4, "votes" : "...", "id" : "..." } } { "_id" : ObjectId("..."), "title" : "American Gangster", "plot" : "...", "genres" : ["Biography", "Crime", "Drama"], "year" : 2007, "rated" : "R", "imdb" : { "rating" : 7.8, "votes" : "...", "id" : "..." } } ...
Observação
Por padrão, o operador wildcard não pode ser executado em um campo analisado. Você pode permitir que ele seja executado em um campo analisado definindo a opção allowAnalyzedField como "true", da seguinte forma:
var result = moviesCollection.Aggregate() .Search(Builders<Movie>.Search.Wildcard(m => m.Title, "Amer*", allowAnalyzedField: true)) .ToList();
Definir a opção allowAnalyzedField como verdadeira pode gerar resultados de pesquisa inesperados. Para saber mais, consulte Comportamento curinga.
Para saber mais sobre o operador wildcard, consulte o guia do Atlas de wildcards.