Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/

LINQ

Nesta página

  • Visão geral
  • Tornar uma coleção consultável
  • Estágios de aggregation suportados
  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • Declarações agrupadas
  • $group
  • $sort
  • $lookup
  • $vectorSearch
  • Operadores bitwise
  • $bitAnd
  • $bitOr
  • $bitNot
  • $bitXor
  • Estágios de agregação não suportados
  • Métodos suportados
  • Ver queries traduzidas

Neste guia, você aprenderá a usar oLINQ com o driver .NET /C# do MongoDB . O LINQ permite que você crie queries em coleções de objetos com tipagem forte usando palavras-chave e operadores de linguagem. O driver .NET/C# converte automaticamente as queries LINQ em operações de agregação .

Os exemplos deste guia usam a restaurants coleção no sample_restaurants banco de dados fornecido nos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster do MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte a seção Início rápido.

As seguintes classes Restaurant, Address e GradeEntry modelam os documentos nesta coleção:

public class Restaurant
{
public ObjectId Id { get; set; }
public string Name { get; set; }
[BsonElement("restaurant_id")]
public string RestaurantId { get; set; }
public string Cuisine { get; set; }
public Address Address { get; set; }
public string Borough { get; set; }
public List<GradeEntry> Grades { get; set; }
}
public class Address
{
public string Building { get; set; }
[BsonElement("coord")]
public double[] Coordinates { get; set; }
public string Street { get; set; }
[BsonElement("zipcode")]
public string ZipCode { get; set; }
}
public class GradeEntry
{
public DateTime Date { get; set; }
public string Grade { get; set; }
public float Score { get; set; }
}

Observação

Os documentos na collection restaurants usam a convenção de nomenclatura snake-case. 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 Restaurant .

Para saber mais sobre serialização personalizada, consulte Serialização personalizada.

Para usar o LINQ para executar uma query na sua coleção, você deve antes criar um objeto IQueryable que se vincule à coleção. Para criar o objeto, use o método AsQueryable() da seguinte forma:

var restaurantsDatabase = client.GetDatabase("sample_restaurants");
var restaurantsCollection = restaurantsDatabase.GetCollection<Restaurant>("restaurants");
var queryableCollection = restaurantsCollection.AsQueryable();

O método AsQueryable() retorna uma instância IMongoQueryable que tem os métodos de extensão IQueryable, juntamente com um conjunto de métodos específicos do MongoDB.

Depois de ter o objeto consultável, você pode compor uma query usando a sintaxe do método. Alguns estágios do pipeline também oferecem suporte à sintaxe de compreensão de queries, que se assemelha à sintaxe de query SQL.

Selecione a guia Method Syntax ou Query Syntax para ver como compor uma consulta com LINQ:

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast")
.Select(r => new { r.Name, r.Address });
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
select new { r.Name, r.Address };

Você pode imprimir os resultados do exemplo anterior da seguinte maneira:

foreach (var restaurant in query)
{
Console.WriteLine(restaurant.ToJson());
}
{ "name" : "The Movable Feast", "address" : { "building" : "284", "coord" : [-73.982923900000003, 40.6580753], "street" : "Prospect Park West", "zipcode" : "11215" } }

Dica

Acessando os resultados da query

Você também pode acessar os resultados da sua consulta utilizando os métodos ToList() ou ToCursor():

var results = query.ToList();
var results = query.ToCursor();

Você pode usar LINQ para criar um pipeline de agregação. O .NET/C# Driver converte automaticamente cada instrução LINQ nos pipeline de agregação correspondentes. Nesta seção você pode aprender quais estágios do pipeline de agregação são suportados.

Para saber mais sobre as etapas do pipeline de agregação, consulte a página Estágios de agregação no manual do servidor.

O estágio de agregação $project retorna um documento contendo apenas os campos especificados.

Selecione a guia Method Syntax ou Query Syntax para ver como gerar um estágio $project usando LINQ:

var query = queryableCollection
.Select(r => new { r.Name, r.Address });
var query = from r in queryableCollection
select new { r.Name, r.Address };

O resultado do exemplo anterior contém o seguinte documento:

{ "name" : "The Movable Feast", "address" : { "building" : "284", "coord" : [-73.982923900000003, 40.6580753], "street" : "Prospect Park West", "zipcode" : "11215" } }

Observação

Excluindo o campo _id

Se você não incluir o campo _id em sua projeção LINQ, o driver .NET/C# excluirá automaticamente os resultados.

O estágio de agregação $match retorna os documentos que correspondem a um critério especificado.

Selecione a guia Method Syntax ou Query Syntax para ver como gerar um estágio $match usando LINQ:

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
select r;

O resultado do exemplo anterior contém o seguinte documento:

// Results Truncated
{ "_id" : ObjectId(...), "name" : "The Movable Feast", "restaurant_id" : "40361606", "cuisine" : "American", "address" : {...}, "borough" : "Brooklyn", "grades" : [...] }

O estágio de agregação de $limit limita o número de documentos retornados pela query. O exemplo a seguir mostra como gerar um estágio $limit usando LINQ:

var query = queryableCollection
.Where(r => r.Cuisine == "Italian")
.Select(r => new {r.Name, r.Cuisine})
.Take(5);

O resultado do exemplo anterior contém os seguintes documentos:

{ "name" : "Philadelhia Grille Express", "cuisine" : "Italian" }
{ "name" : "Isle Of Capri Resturant", "cuisine" : "Italian" }
{ "name" : "Marchis Restaurant", "cuisine" : "Italian" }
{ "name" : "Crystal Room", "cuisine" : "Italian" }
{ "name" : "Forlinis Restaurant", "cuisine" : "Italian" }

O estágio de agregação $skip ignora um número específico de documentos retornados por uma query e, em seguida, retorna o restante dos resultados. O exemplo a seguir mostra como gerar um estágio $skip usando LINQ:

var query = queryableCollection
.Where(r => r.Cuisine == "Italian")
.Select(r => new {r.Name, r.Cuisine})
.Skip(2);

O exemplo anterior ignora os dois primeiros restaurantes que correspondem aos critérios e retorna o restante. O resultado contém os seguintes documentos:

// Results Truncated
{ "name" : "Marchis Restaurant", "cuisine" : "Italian" }
{ "name" : "Crystal Room", "cuisine" : "Italian" }
{ "name" : "Forlinis Restaurant", "cuisine" : "Italian" }
...

O estágio de agregação $unwind desconstrói um campo de array especificado e retorna um documento para cada elemento dessa array.

Selecione a guia Method Syntax ou Query Syntax para ver como gerar um estágio $unwind usando LINQ:

var query = queryableCollection
.Where(r => r.Name == "The Movable Feast")
.SelectMany(r => r.Grades);
var query = from r in queryableCollection
where r.Name == "The Movable Feast"
from grade in r.Grades
select grade;

A query no exemplo anterior encontra o documento onde o campo Name tem o valor "The Movable Feast". Em seguida, para cada elemento na array Grades deste documento, a query retorna um novo documento. O resultado contém os seguintes documentos:

{ "date" : ISODate("2014-11-19T00:00:00Z"), "grade" : "A", "score" : 11 }
{ "date" : ISODate("2013-11-14T00:00:00Z"), "grade" : "A", "score" : 2 }
{ "date" : ISODate("2012-12-05T00:00:00Z"), "grade" : "A", "score" : 13 }
{ "date" : ISODate("2012-05-17T00:00:00Z"), "grade" : "A", "score" : 11 }

Você pode Select encadear ou SelectMany aninhar declarações e para desenrolar arrays aninhados. Considere uma coleta que contenha documentos com um novo esquema. Esses documentos contêm um restaurants campo , que contém uma array de documentos representados pela Restaurant classe . Cada documento dentro da array tem um grades campo que contém uma array de documentos representados pela Grade classe. O seguinte código é um exemplo de um único documento nesta coleção:

{
"_id": { "$oid": ... },
"restaurants": [
{
"_id": { ... } ,
"address": { ... },
"name": "Tov Kosher Kitchen",
"grades": [
{
"date" : ISODate("2014-11-24T00:00:00Z"),
"grade" : "Z",
"score" : 20.0
},
{
"date" : ISODate("2013-01-17T00:00:00Z"),
"grade" : "A",
"score" : 13.0
}
]
...
},
{
"_id": { ... } ,
"address": { ... },
"name": "Harriet's Kitchen",
"grades": [
{
"date" : ISODate("2014-04-19T00:00:00Z"),
"grade" : "B",
"score" : 12.0
}
],
...
},
...
]
}

Você pode aninhar declarações SelectMany dentro de declarações SelectMany ou Select. O exemplo a seguir aninha uma instrução SelectMany dentro de uma instrução Select para recuperar uma array de cada documento na coleção. Cada array contém todos os objetos de nota de todos os restaurantes de cada documento.

var query = queryableCollection
.Select(r => r.Restaurants.SelectMany(r => r.Grades));
// output for first document in collection
[
{ "date" : ISODate("2014-11-24T00:00:00Z"),
"grade" : "Z",
"score" : 20.0
},
{ "date" : ISODate("2013-01-17T00:00:00Z"),
"grade" : "A",
"score" : 13.0
},
{
"date" : ISODate("2014-04-19T00:00:00Z"),
"grade" : "B",
"score" : 12.0
},
...
],
// output for second document in collection
[
...
]

O estágio de agregação do $group separa os documentos em grupos de acordo com os critérios especificados.

Selecione a guia Method Syntax ou Query Syntax para ver como gerar um estágio $group usando LINQ:

var query = queryableCollection
.GroupBy(r => r.Cuisine)
.Select(g => new { Cuisine = g.Key, Count = g.Count() });
var query = from r in queryableCollection
group r by r.Cuisine into g
select new {Cuisine = g.Key, Count = g.Count()};

O exemplo anterior grupo cada documento pelo valor em seu campo Cuisine e, em seguida, conta quantos documentos têm cada valor Cuisine. O resultado contém os seguintes documentos:

// Results Truncated
{ "cuisine" : "Caribbean", "count" : 657 }
{ "cuisine" : "Café/Coffee/Tea", "count" : 1214 }
{ "cuisine" : "Iranian", "count" : 2 }
{ "cuisine" : "Nuts/Confectionary", "count" : 6 }
{ "cuisine" : "Middle Eastern", "count" : 168 }
...

Observação

Ordem dos resultados

As queries anteriores nem sempre retornam resultados na mesma ordem. A execução deste exemplo pode retornar os resultados em uma ordem diferente da mostrada acima.

O estágio de agregação do $sort retorna os resultados da sua query na ordem especificada.

Selecione a guia Method Syntax ou Query Syntax para ver como gerar um estágio $sort usando LINQ:

var query = queryableCollection
.OrderBy(r => r.Name)
.ThenByDescending(r => r.RestaurantId);
var query = from r in queryableCollection
orderby r.Name, r.RestaurantId descending
select r;

O exemplo anterior retorna os resultados da query classificados alfabeticamente pelo campo Name, com uma classificação descendente secundária no campo RestaurantId. A seguir está um subconjunto dos documentos contidos nos resultados retornados:

// Results Truncated
...
{ "_id" : ObjectId(...), "name" : "Aba Turkish Restaurant", "restaurant_id" : "41548686", "cuisine" : "Turkish", "address" : {...}, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abace Sushi", "restaurant_id" : "50006214", "cuisine" : "Japanese", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abacky Potluck", "restaurant_id" : "50011222", "cuisine" : "Asian", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
{ "_id" : ObjectId(...), "name" : "Abaleh", "restaurant_id" : "50009096", "cuisine" : "Mediterranean", "address" : { ... }, "borough" : "Manhattan", "grades" : [...] }
...

O aggregation stage $lookup une documentos de uma coleção a documentos de outra coleção no mesmo database. O estágio $lookup adiciona um novo campo de array a cada documento de entrada. O novo campo de array contém os documentos correspondentes da coleção "entrada".

Observação

Para realizar uma pesquisa, você deve tornar ambas as coleções passíveis de query utilizando o método AsQueryable().

Para saber como tornar uma coleção consultável, consulte Tornar uma coleção consultável.

Considere uma segunda coleção no banco de dados sample_restaurants chamada reviews que tenha avaliações de restaurantes. Você pode unir documentos dessa coleção a documentos com o mesmo valor de name na coleção restaurants usando o estágio $lookup.

A seguinte classe Review modela os documentos na collection reviews:

public class Review
{
public ObjectId Id { get; set; }
[BsonElement("restaurant_name")]
public string RestaurantName { get; set; }
public string Reviewer { get; set; }
[BsonElement("review_text")]
public string ReviewText { get; set; }
}

Selecione a aba Method Syntax ou Query Syntax para ver como gerar uma fase $lookup usando LINQ:

var query = queryableCollection
.GroupJoin(reviewCollection,
restaurant => restaurant.Name,
review => review.RestaurantName,
(restaurant, reviews) =>
new { Restaurant = restaurant, Reviews = reviews }
);
var query = from restaurant in queryableCollection
join rv in reviewCollection on restaurant.Name equals rv.RestaurantName into reviews
select new { restaurant, reviews };

O exemplo anterior retorna todos os documentos da coleção restaurants. Cada documento de restaurante tem um campo adicional chamado reviews, que contém todas as avaliações desse restaurante. Uma avaliação corresponde a um restaurante se o valor do campo name no documento da avaliação corresponder ao campo name do documento do restaurante.

O seguinte mostra um subconjunto dos resultados retornados:

// Results Truncated
{
"restaurant": {
"_id": ObjectId("..."),
"name": "The Movable Feast",
"restaurant_id": "40361606",
"cuisine": "American",
"address": { ... },
"borough": "Brooklyn",
"grades": [ ... ]
},
"reviews": [
{
"_id": ObjectId("..."),
"restaurant_name": "The Movable Feast",
"reviewer": "Lazlo Cravensworth",
"review_text": "Great restaurant! 12/10 stars!"
},
{
"_id": ObjectId("..."),
"restaurant_name": "The Movable Feast",
"reviewer": "Michael Scarn",
"review_text": "It really was a feast"
}
]
}

O estágio de agregação $vectorSearch realiza uma pesquisa aproximada do vizinho mais próximo em um vetor no campo especificado. Sua coleção deve ter um índice Atlas Vector Search definido para que você possa realizar uma pesquisa vetorial em seus dados.

Dica

Para obter o conjunto de dados de amostra usado no exemplo a seguir, consulte Início rápido. Para criar o índice de amostra do Atlas Vector Search usado no exemplo a seguir, consulte Criar um índice do Atlas Vector Search no manual do Atlas.

Considere a coleção embedded_movies no banco de dados sample_mflix. Você pode usar uma fase $vectorSearch para executar uma pesquisa semântica no campo plot_embedding dos documentos na coleção.

A seguinte classe EmbeddedMovie modela os documentos na collection embedded_movies:

[BsonIgnoreExtraElements]
public class EmbeddedMovie
{
[BsonIgnoreIfDefault]
public string Title { get; set; }
public string Plot { get; set; }
[BsonElement("plot_embedding")]
public double[] Embedding { get; set; }
}

O exemplo a seguir mostra como gerar um estágio $vectorSearch para pesquisar o campo plot_embedding usando incorporações vetoriais para a string "time travel":

// Defines vector embeddings for the string "time travel"
var vector = new[] {-0.0016261312,-0.028070757,-0.011342932,-0.012775794,-0.0027440966,0.008683807,-0.02575152,-0.02020668,-0.010283281,-0.0041719596,0.021392956,0.028657231,-0.006634482,0.007490867,0.018593878,0.0038187427,0.029590257,-0.01451522,0.016061379,0.00008528442,-0.008943722,0.01627464,0.024311995,-0.025911469,0.00022596726,-0.008863748,0.008823762,-0.034921836,0.007910728,-0.01515501,0.035801545,-0.0035688248,-0.020299982,-0.03145631,-0.032256044,-0.028763862,-0.0071576433,-0.012769129,0.012322609,-0.006621153,0.010583182,0.024085402,-0.001623632,0.007864078,-0.021406285,0.002554159,0.012229307,-0.011762793,0.0051682983,0.0048484034,0.018087378,0.024325324,-0.037694257,-0.026537929,-0.008803768,-0.017767483,-0.012642504,-0.0062712682,0.0009771782,-0.010409906,0.017754154,-0.004671795,-0.030469967,0.008477209,-0.005218282,-0.0058480743,-0.020153364,-0.0032805866,0.004248601,0.0051449724,0.006791097,0.007650814,0.003458861,-0.0031223053,-0.01932697,-0.033615597,0.00745088,0.006321252,-0.0038154104,0.014555207,0.027697546,-0.02828402,0.0066711367,0.0077107945,0.01794076,0.011349596,-0.0052715978,0.014755142,-0.019753495,-0.011156326,0.011202978,0.022126047,0.00846388,0.030549942,-0.0041386373,0.018847128,-0.00033655585,0.024925126,-0.003555496,-0.019300312,0.010749794,0.0075308536,-0.018287312,-0.016567878,-0.012869096,-0.015528221,0.0078107617,-0.011156326,0.013522214,-0.020646535,-0.01211601,0.055928253,0.011596181,-0.017247654,0.0005939711,-0.026977783,-0.003942035,-0.009583511,-0.0055248477,-0.028737204,0.023179034,0.003995351,0.0219661,-0.008470545,0.023392297,0.010469886,-0.015874773,0.007890735,-0.009690142,-0.00024970944,0.012775794,0.0114762215,0.013422247,0.010429899,-0.03686786,-0.006717788,-0.027484283,0.011556195,-0.036068123,-0.013915418,-0.0016327957,0.0151016945,-0.020473259,0.004671795,-0.012555866,0.0209531,0.01982014,0.024485271,0.0105431955,-0.005178295,0.033162415,-0.013795458,0.007150979,0.010243294,0.005644808,0.017260984,-0.0045618312,0.0024725192,0.004305249,-0.008197301,0.0014203656,0.0018460588,0.005015015,-0.011142998,0.01439526,0.022965772,0.02552493,0.007757446,-0.0019726837,0.009503538,-0.032042783,0.008403899,-0.04609149,0.013808787,0.011749465,0.036388017,0.016314628,0.021939443,-0.0250051,-0.017354285,-0.012962398,0.00006107364,0.019113706,0.03081652,-0.018114036,-0.0084572155,0.009643491,-0.0034721901,0.0072642746,-0.0090636825,0.01642126,0.013428912,0.027724205,0.0071243206,-0.6858542,-0.031029783,-0.014595194,-0.011449563,0.017514233,0.01743426,0.009950057,0.0029706885,-0.015714826,-0.001806072,0.011856096,0.026444625,-0.0010663156,-0.006474535,0.0016161345,-0.020313311,0.0148351155,-0.0018393943,0.0057347785,0.018300641,-0.018647194,0.03345565,-0.008070676,0.0071443142,0.014301958,0.0044818576,0.003838736,-0.007350913,-0.024525259,-0.001142124,-0.018620536,0.017247654,0.007037683,0.010236629,0.06046009,0.0138887605,-0.012122675,0.037694257,0.0055081863,0.042492677,0.00021784494,-0.011656162,0.010276617,0.022325981,0.005984696,-0.009496873,0.013382261,-0.0010563189,0.0026507939,-0.041639622,0.008637156,0.026471283,-0.008403899,0.024858482,-0.00066686375,-0.0016252982,0.027590916,0.0051449724,0.0058647357,-0.008743787,-0.014968405,0.027724205,-0.011596181,0.0047650975,-0.015381602,0.0043718936,0.002159289,0.035908177,-0.008243952,-0.030443309,0.027564257,0.042625964,-0.0033688906,0.01843393,0.019087048,0.024578573,0.03268257,-0.015608194,-0.014128681,-0.0033538956,-0.0028757197,-0.004121976,-0.032389335,0.0034322033,0.058807302,0.010943064,-0.030523283,0.008903735,0.017500903,0.00871713,-0.0029406983,0.013995391,-0.03132302,-0.019660193,-0.00770413,-0.0038853872,0.0015894766,-0.0015294964,-0.006251275,-0.021099718,-0.010256623,-0.008863748,0.028550599,0.02020668,-0.0012962399,-0.003415542,-0.0022509254,0.0119360695,0.027590916,-0.046971202,-0.0015194997,-0.022405956,0.0016677842,-0.00018535563,-0.015421589,-0.031802863,0.03814744,0.0065411795,0.016567878,-0.015621523,0.022899127,-0.011076353,0.02841731,-0.002679118,-0.002342562,0.015341615,0.01804739,-0.020566562,-0.012989056,-0.002990682,0.01643459,0.00042527664,0.008243952,-0.013715484,-0.004835075,-0.009803439,0.03129636,-0.021432944,0.0012087687,-0.015741484,-0.0052016205,0.00080890034,-0.01755422,0.004811749,-0.017967418,-0.026684547,-0.014128681,0.0041386373,-0.013742141,-0.010056688,-0.013268964,-0.0110630235,-0.028337335,0.015981404,-0.00997005,-0.02424535,-0.013968734,-0.028310679,-0.027750863,-0.020699851,0.02235264,0.001057985,0.00081639783,-0.0099367285,0.013522214,-0.012016043,-0.00086471526,0.013568865,0.0019376953,-0.019020405,0.017460918,-0.023045745,0.008503866,0.0064678704,-0.011509543,0.018727167,-0.003372223,-0.0028690554,-0.0027024434,-0.011902748,-0.012182655,-0.015714826,-0.0098634185,0.00593138,0.018753825,0.0010146659,0.013029044,0.0003521757,-0.017620865,0.04102649,0.00552818,0.024485271,-0.009630162,-0.015608194,0.0006718621,-0.0008418062,0.012395918,0.0057980907,0.016221326,0.010616505,0.004838407,-0.012402583,0.019900113,-0.0034521967,0.000247002,-0.03153628,0.0011038032,-0.020819811,0.016234655,-0.00330058,-0.0032289368,0.00078973995,-0.021952773,-0.022459272,0.03118973,0.03673457,-0.021472929,0.0072109587,-0.015075036,0.004855068,-0.0008151483,0.0069643734,0.010023367,-0.010276617,-0.023019087,0.0068244194,-0.0012520878,-0.0015086699,0.022046074,-0.034148756,-0.0022192693,0.002427534,-0.0027124402,0.0060346797,0.015461575,0.0137554705,0.009230294,-0.009583511,0.032629255,0.015994733,-0.019167023,-0.009203636,0.03393549,-0.017274313,-0.012042701,-0.0009930064,0.026777849,-0.013582194,-0.0027590916,-0.017594207,-0.026804507,-0.0014236979,-0.022032745,0.0091236625,-0.0042419364,-0.00858384,-0.0033905501,-0.020739838,0.016821127,0.022539245,0.015381602,0.015141681,0.028817179,-0.019726837,-0.0051283115,-0.011489551,-0.013208984,-0.0047017853,-0.0072309524,0.01767418,0.0025658219,-0.010323267,0.012609182,-0.028097415,0.026871152,-0.010276617,0.021912785,0.0022542577,0.005124979,-0.0019710176,0.004518512,-0.040360045,0.010969722,-0.0031539614,-0.020366628,-0.025778178,-0.0110030435,-0.016221326,0.0036587953,0.016207997,0.003007343,-0.0032555948,0.0044052163,-0.022046074,-0.0008822095,-0.009363583,0.028230704,-0.024538586,0.0029840174,0.0016044717,-0.014181997,0.031349678,-0.014381931,-0.027750863,0.02613806,0.0004136138,-0.005748107,-0.01868718,-0.0010138329,0.0054348772,0.010703143,-0.003682121,0.0030856507,-0.004275259,-0.010403241,0.021113047,-0.022685863,-0.023032416,0.031429652,0.001792743,-0.005644808,-0.011842767,-0.04078657,-0.0026874484,0.06915057,-0.00056939584,-0.013995391,0.010703143,-0.013728813,-0.022939114,-0.015261642,-0.022485929,0.016807798,0.007964044,0.0144219175,0.016821127,0.0076241563,0.005461535,-0.013248971,0.015301628,0.0085171955,-0.004318578,0.011136333,-0.0059047225,-0.010249958,-0.018207338,0.024645219,0.021752838,0.0007614159,-0.013648839,0.01111634,-0.010503208,-0.0038487327,-0.008203966,-0.00397869,0.0029740208,0.008530525,0.005261601,0.01642126,-0.0038753906,-0.013222313,0.026537929,0.024671877,-0.043505676,0.014195326,0.024778508,0.0056914594,-0.025951454,0.017620865,-0.0021359634,0.008643821,0.021299653,0.0041686273,-0.009017031,0.04044002,0.024378639,-0.027777521,-0.014208655,0.0028623908,0.042119466,0.005801423,-0.028124074,-0.03129636,0.022139376,-0.022179363,-0.04067994,0.013688826,0.013328944,0.0046184794,-0.02828402,-0.0063412455,-0.0046184794,-0.011756129,-0.010383247,-0.0018543894,-0.0018593877,-0.00052024535,0.004815081,0.014781799,0.018007403,0.01306903,-0.020433271,0.009043689,0.033189073,-0.006844413,-0.019766824,-0.018767154,0.00533491,-0.0024575242,0.018727167,0.0058080875,-0.013835444,0.0040719924,0.004881726,0.012029372,0.005664801,0.03193615,0.0058047553,0.002695779,0.009290274,0.02361889,0.017834127,0.0049017193,-0.0036388019,0.010776452,-0.019793482,0.0067777685,-0.014208655,-0.024911797,0.002385881,0.0034988478,0.020899786,-0.0025858153,-0.011849431,0.033189073,-0.021312982,0.024965113,-0.014635181,0.014048708,-0.0035921505,-0.003347231,0.030869836,-0.0017161017,-0.0061346465,0.009203636,-0.025165047,0.0068510775,0.021499587,0.013782129,-0.0024475274,-0.0051149824,-0.024445284,0.006167969,0.0068844,-0.00076183246,0.030150073,-0.0055948244,-0.011162991,-0.02057989,-0.009703471,-0.020646535,0.008004031,0.0066378145,-0.019900113,-0.012169327,-0.01439526,0.0044252095,-0.004018677,0.014621852,-0.025085073,-0.013715484,-0.017980747,0.0071043274,0.011456228,-0.01010334,-0.0035321703,-0.03801415,-0.012036037,-0.0028990454,-0.05419549,-0.024058744,-0.024272008,0.015221654,0.027964126,0.03182952,-0.015354944,0.004855068,0.011522872,0.004771762,0.0027874154,0.023405626,0.0004242353,-0.03132302,0.007057676,0.008763781,-0.0027057757,0.023005757,-0.0071176565,-0.005238275,0.029110415,-0.010989714,0.013728813,-0.009630162,-0.029137073,-0.0049317093,-0.0008630492,-0.015248313,0.0043219104,-0.0055681667,-0.013175662,0.029723546,0.025098402,0.012849103,-0.0009996708,0.03118973,-0.0021709518,0.0260181,-0.020526575,0.028097415,-0.016141351,0.010509873,-0.022965772,0.002865723,0.0020493253,0.0020509914,-0.0041419696,-0.00039695262,0.017287642,0.0038987163,0.014795128,-0.014661839,-0.008950386,0.004431874,-0.009383577,0.0012604183,-0.023019087,0.0029273694,-0.033135757,0.009176978,-0.011023037,-0.002102641,0.02663123,-0.03849399,-0.0044152127,0.0004527676,-0.0026924468,0.02828402,0.017727496,0.035135098,0.02728435,-0.005348239,-0.001467017,-0.019766824,0.014715155,0.011982721,0.0045651635,0.023458943,-0.0010046692,-0.0031373003,-0.0006972704,0.0019043729,-0.018967088,-0.024311995,0.0011546199,0.007977373,-0.004755101,-0.010016702,-0.02780418,-0.004688456,0.013022379,-0.005484861,0.0017227661,-0.015394931,-0.028763862,-0.026684547,0.0030589928,-0.018513903,0.028363993,0.0044818576,-0.009270281,0.038920518,-0.016008062,0.0093902415,0.004815081,-0.021059733,0.01451522,-0.0051583014,0.023765508,-0.017874114,-0.016821127,-0.012522544,-0.0028390652,0.0040886537,0.020259995,-0.031216389,-0.014115352,-0.009176978,0.010303274,0.020313311,0.0064112223,-0.02235264,-0.022872468,0.0052449396,0.0005723116,0.0037321046,0.016807798,-0.018527232,-0.009303603,0.0024858483,-0.0012662497,-0.007110992,0.011976057,-0.007790768,-0.042999174,-0.006727785,-0.011829439,0.007024354,0.005278262,-0.017740825,-0.0041519664,0.0085905045,0.027750863,-0.038387362,0.024391968,0.00087721116,0.010509873,-0.00038508154,-0.006857742,0.0183273,-0.0037054466,0.015461575,0.0017394272,-0.0017944091,0.014181997,-0.0052682655,0.009023695,0.00719763,-0.013522214,0.0034422,0.014941746,-0.0016711164,-0.025298337,-0.017634194,0.0058714002,-0.005321581,0.017834127,0.0110630235,-0.03369557,0.029190388,-0.008943722,0.009363583,-0.0034222065,-0.026111402,-0.007037683,-0.006561173,0.02473852,-0.007084334,-0.010110005,-0.008577175,0.0030439978,-0.022712521,0.0054582027,-0.0012620845,-0.0011954397,-0.015741484,0.0129557345,-0.00042111133,0.00846388,0.008930393,0.016487904,0.010469886,-0.007917393,-0.011762793,-0.0214596,0.000917198,0.021672864,0.010269952,-0.007737452,-0.010243294,-0.0067244526,-0.015488233,-0.021552904,0.017127695,0.011109675,0.038067464,0.00871713,-0.0025591573,0.021312982,-0.006237946,0.034628596,-0.0045251767,0.008357248,0.020686522,0.0010696478,0.0076708077,0.03772091,-0.018700508,-0.0020676525,-0.008923728,-0.023298996,0.018233996,-0.010256623,0.0017860786,0.009796774,-0.00897038,-0.01269582,-0.018527232,0.009190307,-0.02372552,-0.042119466,0.008097334,-0.0066778013,-0.021046404,0.0019593548,0.011083017,-0.0016028056,0.012662497,-0.000059095124,0.0071043274,-0.014675168,0.024831824,-0.053582355,0.038387362,0.0005698124,0.015954746,0.021552904,0.031589597,-0.009230294,-0.0006147976,0.002625802,-0.011749465,-0.034362018,-0.0067844326,-0.018793812,0.011442899,-0.008743787,0.017474247,-0.021619547,0.01831397,-0.009037024,-0.0057247817,-0.02728435,0.010363255,0.034415334,-0.024032086,-0.0020126705,-0.0045518344,-0.019353628,-0.018340627,-0.03129636,-0.0034038792,-0.006321252,-0.0016161345,0.033642255,-0.000056075285,-0.005005019,0.004571828,-0.0024075406,-0.00010215386,0.0098634185,0.1980148,-0.003825407,-0.025191706,0.035161756,0.005358236,0.025111731,0.023485601,0.0023342315,-0.011882754,0.018287312,-0.0068910643,0.003912045,0.009243623,-0.001355387,-0.028603915,-0.012802451,-0.030150073,-0.014795128,-0.028630573,-0.0013487226,0.002667455,0.00985009,-0.0033972147,-0.021486258,0.009503538,-0.017847456,0.013062365,-0.014341944,0.005078328,0.025165047,-0.015594865,-0.025924796,-0.0018177348,0.010996379,-0.02993681,0.007324255,0.014475234,-0.028577257,0.005494857,0.00011725306,-0.013315615,0.015941417,0.009376912,0.0025158382,0.008743787,0.023832154,-0.008084005,-0.014195326,-0.008823762,0.0033455652,-0.032362677,-0.021552904,-0.0056081535,0.023298996,-0.025444955,0.0097301295,0.009736794,0.015274971,-0.0012937407,-0.018087378,-0.0039387033,0.008637156,-0.011189649,-0.00023846315,-0.011582852,0.0066411467,-0.018220667,0.0060846633,0.0376676,-0.002709108,0.0072776037,0.0034188742,-0.010249958,-0.0007747449,-0.00795738,-0.022192692,0.03910712,0.032122757,0.023898797,0.0076241563,-0.007397564,-0.003655463,0.011442899,-0.014115352,-0.00505167,-0.031163072,0.030336678,-0.006857742,-0.022259338,0.004048667,0.02072651,0.0030156737,-0.0042119464,0.00041861215,-0.005731446,0.011103011,0.013822115,0.021512916,0.009216965,-0.006537847,-0.027057758,-0.04054665,0.010403241,-0.0056281467,-0.005701456,-0.002709108,-0.00745088,-0.0024841821,0.009356919,-0.022659205,0.004061996,-0.013175662,0.017074378,-0.006141311,-0.014541878,0.02993681,-0.00028448965,-0.025271678,0.011689484,-0.014528549,0.004398552,-0.017274313,0.0045751603,0.012455898,0.004121976,-0.025458284,-0.006744446,0.011822774,-0.015035049,-0.03257594,0.014675168,-0.0039187097,0.019726837,-0.0047251107,0.0022825818,0.011829439,0.005391558,-0.016781142,-0.0058747325,0.010309938,-0.013049036,0.01186276,-0.0011246296,0.0062112883,0.0028190718,-0.021739509,0.009883412,-0.0073175905,-0.012715813,-0.017181009,-0.016607866,-0.042492677,-0.0014478565,-0.01794076,0.012302616,-0.015194997,-0.04433207,-0.020606548,0.009696807,0.010303274,-0.01694109,-0.004018677,0.019353628,-0.001991011,0.000058938927,0.010536531,-0.17274313,0.010143327,0.014235313,-0.024152048,0.025684876,-0.0012504216,0.036601283,-0.003698782,0.0007310093,0.004165295,-0.0029157067,0.017101036,-0.046891227,-0.017460918,0.022965772,0.020233337,-0.024072073,0.017220996,0.009370248,0.0010363255,0.0194336,-0.019606877,0.01818068,-0.020819811,0.007410893,0.0019326969,0.017887443,0.006651143,0.00067394477,-0.011889419,-0.025058415,-0.008543854,0.021579562,0.0047484366,0.014062037,0.0075508473,-0.009510202,-0.009143656,0.0046817916,0.013982063,-0.0027990784,0.011782787,0.014541878,-0.015701497,-0.029350337,0.021979429,0.01332228,-0.026244693,-0.0123492675,-0.003895384,0.0071576433,-0.035454992,-0.00046984528,0.0033522295,0.039347045,0.0005119148,0.00476843,-0.012995721,0.0024042083,-0.006931051,-0.014461905,-0.0127558,0.0034555288,-0.0074842023,-0.030256703,-0.007057676,-0.00807734,0.007804097,-0.006957709,0.017181009,-0.034575284,-0.008603834,-0.005008351,-0.015834786,0.02943031,0.016861115,-0.0050849924,0.014235313,0.0051449724,0.0025924798,-0.0025741523,0.04289254,-0.002104307,0.012969063,-0.008310596,0.00423194,0.0074975314,0.0018810473,-0.014248641,-0.024725191,0.0151016945,-0.017527562,0.0018727167,0.0002830318,0.015168339,0.0144219175,-0.004048667,-0.004358565,0.011836103,-0.010343261,-0.005911387,0.0022825818,0.0073175905,0.00403867,0.013188991,0.03334902,0.006111321,0.008597169,0.030123414,-0.015474904,0.0017877447,-0.024551915,0.013155668,0.023525586,-0.0255116,0.017220996,0.004358565,-0.00934359,0.0099967085,0.011162991,0.03092315,-0.021046404,-0.015514892,0.0011946067,-0.01816735,0.010876419,-0.10124666,-0.03550831,0.0056348112,0.013942076,0.005951374,0.020419942,-0.006857742,-0.020873128,-0.021259667,0.0137554705,0.0057880944,-0.029163731,-0.018767154,-0.021392956,0.030896494,-0.005494857,-0.0027307675,-0.006801094,-0.014821786,0.021392956,-0.0018110704,-0.0018843795,-0.012362596,-0.0072176233,-0.017194338,-0.018713837,-0.024272008,0.03801415,0.00015880188,0.0044951867,-0.028630573,-0.0014070367,-0.00916365,-0.026537929,-0.009576847,-0.013995391,-0.0077107945,0.0050016865,0.00578143,-0.04467862,0.008363913,0.010136662,-0.0006268769,-0.006591163,0.015341615,-0.027377652,-0.00093136,0.029243704,-0.020886457,-0.01041657,-0.02424535,0.005291591,-0.02980352,-0.009190307,0.019460259,-0.0041286405,0.004801752,0.0011787785,-0.001257086,-0.011216307,-0.013395589,0.00088137644,-0.0051616337,0.03876057,-0.0033455652,0.00075850025,-0.006951045,-0.0062112883,0.018140694,-0.006351242,-0.008263946,0.018154023,-0.012189319,0.0075508473,-0.044358727,-0.0040153447,0.0093302615,-0.010636497,0.032789204,-0.005264933,-0.014235313,-0.018393943,0.007297597,-0.016114693,0.015021721,0.020033404,0.0137688,0.0011046362,0.010616505,-0.0039453674,0.012109346,0.021099718,-0.0072842683,-0.019153694,-0.003768759,0.039320387,-0.006747778,-0.0016852784,0.018154023,0.0010963057,-0.015035049,-0.021033075,-0.04345236,0.017287642,0.016341286,-0.008610498,0.00236922,0.009290274,0.028950468,-0.014475234,-0.0035654926,0.015434918,-0.03372223,0.004501851,-0.012929076,-0.008483873,-0.0044685286,-0.0102233,0.01615468,0.0022792495,0.010876419,-0.0059647025,0.01895376,-0.0069976957,-0.0042952523,0.017207667,-0.00036133936,0.0085905045,0.008084005,0.03129636,-0.016994404,-0.014915089,0.020100048,-0.012009379,-0.006684466,0.01306903,0.00015765642,-0.00530492,0.0005277429,0.015421589,0.015528221,0.032202728,-0.003485519,-0.0014286962,0.033908837,0.001367883,0.010509873,0.025271678,-0.020993087,0.019846799,0.006897729,-0.010216636,-0.00725761,0.01818068,-0.028443968,-0.011242964,-0.014435247,-0.013688826,0.006101324,-0.0022509254,0.013848773,-0.0019077052,0.017181009,0.03422873,0.005324913,-0.0035188415,0.014128681,-0.004898387,0.005038341,0.0012320944,-0.005561502,-0.017847456,0.0008538855,-0.0047884234,0.011849431,0.015421589,-0.013942076,0.0029790192,-0.013702155,0.0001199605,-0.024431955,0.019926772,0.022179363,-0.016487904,-0.03964028,0.0050849924,0.017487574,0.022792496,0.0012504216,0.004048667,-0.00997005,0.0076041627,-0.014328616,-0.020259995,0.0005598157,-0.010469886,0.0016852784,0.01716768,-0.008990373,-0.001987679,0.026417969,0.023792166,0.0046917885,-0.0071909656,-0.00032051947,-0.023259008,-0.009170313,0.02071318,-0.03156294,-0.030869836,-0.006324584,0.013795458,-0.00047151142,0.016874444,0.00947688,0.00985009,-0.029883493,0.024205362,-0.013522214,-0.015075036,-0.030603256,0.029270362,0.010503208,0.021539574,0.01743426,-0.023898797,0.022019416,-0.0068777353,0.027857494,-0.021259667,0.0025758184,0.006197959,0.006447877,-0.00025200035,-0.004941706,-0.021246338,-0.005504854,-0.008390571,-0.0097301295,0.027244363,-0.04446536,0.05216949,0.010243294,-0.016008062,0.0122493,-0.0199401,0.009077012,0.019753495,0.006431216,-0.037960835,-0.027377652,0.016381273,-0.0038620618,0.022512587,-0.010996379,-0.0015211658,-0.0102233,0.007071005,0.008230623,-0.009490209,-0.010083347,0.024431955,0.002427534,0.02828402,0.0035721571,-0.022192692,-0.011882754,0.010056688,0.0011904413,-0.01426197,-0.017500903,-0.00010985966,0.005591492,-0.0077707744,-0.012049366,0.011869425,0.00858384,-0.024698535,-0.030283362,0.020140035,0.011949399,-0.013968734,0.042732596,-0.011649498,-0.011982721,-0.016967745,-0.0060913274,-0.007130985,-0.013109017,-0.009710136};
// Specifies that the vector search will consider the 150 nearest neighbors
// in the specified index
var options = new VectorSearchOptions<EmbeddedMovie>()
{
IndexName = "vector_index",
NumberOfCandidates = 150
};
// Builds aggregation pipeline and specifies that the $vectorSearch stage
// returns 10 results
var results = queryableCollection
.VectorSearch(m => m.Embedding, vector, 10, options)
.Select(m => new { m.Title, m.Plot });

Os resultados do exemplo anterior contêm os seguintes documentos:

{ "_id" : ObjectId("573a13a0f29313caabd04a4f"), "plot" : "A reporter, learning of time travelers visiting 20th century disasters, tries to change the history they know by averting upcoming disasters.", "title" : "Thrill Seekers" }
{ "_id" : ObjectId("573a13d8f29313caabda6557"), "plot" : "At the age of 21, Tim discovers he can travel in time and change what happens and has happened in his own life. His decision to make his world a better place by getting a girlfriend turns out not to be as easy as you might think.", "title" : "About Time" }
{ "_id" : ObjectId("573a13a5f29313caabd13b4b"), "plot" : "Hoping to alter the events of the past, a 19th century inventor instead travels 800,000 years into the future, where he finds humankind divided into two warring races.", "title" : "The Time Machine" }
{ "_id" : ObjectId("573a13aef29313caabd2e2d7"), "plot" : "After using his mother's newly built time machine, Dolf gets stuck involuntary in the year 1212. He ends up in a children's crusade where he confronts his new friends with modern techniques...", "title" : "Crusade in Jeans" }
{ "_id" : ObjectId("573a1399f29313caabceec0e"), "plot" : "An officer for a security agency that regulates time travel, must fend for his life against a shady politician who has a tie to his past.", "title" : "Timecop" }
{ "_id" : ObjectId("573a1399f29313caabcee36f"), "plot" : "A time-travel experiment in which a robot probe is sent from the year 2073 to the year 1973 goes terribly wrong thrusting one of the project scientists, a man named Nicholas Sinclair into a...", "title" : "A.P.E.X." }
{ "_id" : ObjectId("573a13c6f29313caabd715d3"), "plot" : "Agent J travels in time to M.I.B.'s early days in 1969 to stop an alien from assassinating his friend Agent K and changing history.", "title" : "Men in Black 3" }
{ "_id" : ObjectId("573a13d4f29313caabd98c13"), "plot" : "Bound by a shared destiny, a teen bursting with scientific curiosity and a former boy-genius inventor embark on a mission to unearth the secrets of a place somewhere in time and space that exists in their collective memory.", "title" : "Tomorrowland" }
{ "_id" : ObjectId("573a13b6f29313caabd477fa"), "plot" : "With the help of his uncle, a man travels to the future to try and bring his girlfriend back to life.", "title" : "Love Story 2050" }
{ "_id" : ObjectId("573a13e5f29313caabdc40c9"), "plot" : "A dimension-traveling wizard gets stuck in the 21st century because cell-phone radiation interferes with his magic. With his home world on the brink of war, he seeks help from a jaded ...", "title" : "The Portal" }

Para obter mais informações sobre o Atlas Vector Search, os índices do Atlas Vector Search e como incorporá-los ao seu aplicativo, consulte Visão geral do Atlas Vector Search no manual do Atlas. Para obter mais exemplos sobre como executar queries do Atlas Vector Search usando o driver .NET/C#, consulte Executar querues do Vector Search no manual do Atlas e selecione C# no menu suspenso de idiomas.

Esta seção descreve os operadores bitwise compatíveis com o driver .NET/C# que você pode usar em uma agregação pipeline. Você pode usar vários operadores bitwise no mesmo estágio. As seguintes diretrizes se aplicam ao usar operadores bitwise:

  • Todos os operandos devem ser do tipo int ou long.

  • $bitAnd, $bitOr e $bitXor usam dois ou mais operandos. $bitNot usa um operando.

  • As operações bitwise são avaliadas da esquerda para a direita.

Os exemplos nesta seção usam os seguintes documentos em uma collection chamada ingredients:

{ "_id" : 1, "name" : "watermelon", "is_available" : 1, "is_cheap" : 1 },
{ "_id" : 2, "name" : "onions", "is_available" : 1, "is_cheap" : 0 },
{ "_id" : 3, "name" : "eggs", "is_available" : 0, "is_cheap" : 0 },
{ "_id" : 4, "name" : "potatoes", "is_available" : 1, "is_cheap" : 1 },
{ "_id" : 5, "name" : "pasta", "is_available" : 0, "is_cheap" : 1 },
{ "_id" : 6, "name" : "cheese", "is_available" : 1 }

O campo "is_available" representa se um componente está disponível. Se este campo tiver um valor de 0, o componente não estará disponível. Se tiver um valor de 1, o componente está disponível.

O campo "is_cheap" representa se um componente é barato. Se este campo tiver um valor de 0, o componente não é barato. Se tiver um valor de 1, o componente é barato.

A seguinte classe Ingredient modela os documentos na collection ingredients:

public class Ingredient
{
public int Id { get; set; }
public string Name { get; set; }
[BsonElement("is_available")]
public int? IsAvailable { get; set; }
[BsonElement("is_cheap")]
public int? IsCheap { get; set; }
}

Observação

Operandos ausentes ou indefinidos

Se os operandos que você passar para qualquer operador bitwise forem do tipo anulável int ou long e contiverem um valor ausente ou indefinido, a expressão inteira será avaliada como null. Se os operandos forem do tipo não anulável int ou long e contiverem um valor ausente ou indefinido, o driver .NET/C# lançará um erro.

O operador de agregação do $bitAnd executa uma operação bitwise AND nos argumentos fornecidos. Você pode usar o operador $bitAnd conectando duas ou mais cláusulas com um caractere &.

O exemplo a seguir mostra como criar um estágio $bitAnd usando LINQ. O código recupera o documento no qual o campo Name tem o valor "watermelon". Em seguida, ele executa uma operação bitwise AND nos valores dos campos IsAvailable e IsCheap neste documento.

var query = queryableCollection
.Where(i => i.Name == "watermelon")
.Select(i => i.IsAvailable & i.IsCheap);

O código anterior retorna 1, o resultado da operação E nos valores do campo IsAvailable (1) e do campo IsCheap (1).

O exemplo a seguir executa a mesma operação bitwise AND em todos os documentos da collection:

var query = queryableCollection
.Select(i => i.IsAvailable & i.IsCheap);
1
0
0
1
0
null

O resultado null vem do documento onde o campo Name tem o valor de "cheese". Este documento está sem um campo IsCheap , então a expressão é avaliada como null.

O operador de agregação do $bitOr executa uma operação bitwise OR nos argumentos fornecidos. Você pode usar o operador $bitOr conectando duas ou mais cláusulas com um caractere |.

O exemplo a seguir mostra como criar um estágio $bitOr usando LINQ. O código recupera o documento no qual o campo Name tem o valor "onions". Em seguida, ele executa uma operação bitwise OR nos valores dos campos IsAvailable e IsCheap neste documento.

var query = queryableCollection
.Where(i => i.Name == "onions")
.Select(i => i.IsAvailable | i.IsCheap);

O código anterior retorna 1, o resultado da operação OU nos valores do campo IsAvailable (1) e do campo IsCheap (0).

O operador de agregação $bitNot executa uma operação bitwise NÃO no argumento fornecido. Você pode usar o operador $bitNot precedendo um operando com um caractere ~. $bitNot usa apenas um argumento. O exemplo a seguir mostra como criar um estágio $bitNot usando LINQ:

var query = queryableCollection
.Select(i => ~i.IsCheap);
-2
-1
-1
-2
-2
null

O operador de agregação $bitXor executa uma operação bitwise XOR nos argumentos fornecidos. Você pode usar o operador $bitXor conectando duas ou mais cláusulas com um caractere ^.

O exemplo a seguir mostra como criar um estágio $bitXor usando LINQ. O código recupera os documentos nos quais o campo Name tem o valor "watermelon" ou "onions". Em seguida, ele executa uma operação bitwise XOR nos valores dos campos IsAvailable e IsCheap nesses documentos.

var query = queryableCollection
.Where(i => i.Name == "watermelon" || i.Name == "onions")
.Select(i => i.IsAvailable ^ i.IsCheap);

O resultado contém os seguintes valores:

0
1

A implementação do driver MongoDB .NET/C# do LINQ não oferece suporte aos seguintes estágios de agregação:

  • $redact

  • $geoNear

  • $out

Para saber como criar um pipeline de agregação com o estágio $out usando construtores, consulte a seção Gravar resultados do pipeline em uma seção.

Seguem-se alguns métodos suportados pela implementação do Driver de LINQ do MongoDB .NET/C#:

Nome do método
Descrição

Any

Determina se algum documento corresponde aos critérios especificados

Average

Calcula a média dos campos especificados

Count

Retorna um Int32 que representa o número de documentos que correspondem aos critérios especificados

LongCount

Retorna um Int64 que representa o número de documentos que correspondem aos critérios especificados

DateFromString

Converte um string em um objeto DateTime

Distinct

Retorna documentos distintos que correspondem aos critérios especificados

Exists

Testa se um campo existe

First

Retorna o primeiro documento correspondente e joga uma exceção se nenhuma for encontrada

FirstOrDefault

Retorna o primeiro documento correspondente ou null se nenhum for encontrado

GroupBy

Agrupa documentos com base em critérios especificados

GroupJoin

Executa uma ligação externa esquerda para outra coleção no mesmo banco de dados

IsMissing

Retorna true se um campo estiver ausente e falso caso contrário

IsNullOrMissing

Retorna true se um campo for nulo ou ausente e falso caso contrário

Max

Retorna o documento com o valor máximo especificado

OfType

Retorna documentos que correspondem ao tipo especificado

OrderBy, OrderByDescending

Retorna resultados em uma ordem de classificação especificada

ThenBy, ThenByDescending

Permite que uma classificação secundária seja especificada

Select

Seleciona documentos com base em critérios especificados

SelectMany

Projeta cada elemento de uma sequência e combina as sequências resultantes em um documento

Single

Retorna o único documento correspondente e joga uma exceção se não houver exatamente um documento

SingleOrDefault

Retorna um único documento correspondente ou null se nenhum documento corresponder

Skip

Ignora um número especificado de documentos e retorna o restante dos resultados

Sum

Retorna a soma dos valores em um campo especificado

Take

Especifica o número de resultados a serem retornados

Where

Retorna todos os documentos que correspondem aos critérios especificados

Quando você executa uma query LINQ, o driver .NET/C# converte automaticamente sua query em um pipleine de agregação escrito com a API de query do MongoDB. Você pode visualizar a query traduzida usando o método ToString() ou a propriedade LoggedStages.

Para ver a query traduzida para operações não escalares, use o método ToString() . As operações não escalares são operações que retornam um objeto de query, como:

  • Where

  • Select

  • SelectMany

  • GroupJoin

O exemplo a seguir chama o método ToString() em uma query LINQ e imprime a query traduzida:

var queryableCollection = _restaurantsCollection.AsQueryable();
var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var queryTranslated = query.ToString();
Console.WriteLine(queryTranslated);
sample_restaurants.restaurants.Aggregate([{ "$match" : { "name" : "The Movable Feast" } }])

Para obter a query traduzida para operações escalares, use a propriedade LoggedStages. Operações escalares são operações que retornam um resultado escalar em vez de um objeto de query, como, por exemplo:

  • First

  • Sum

  • Count

  • Min

  • Max

Para obter uma query traduzida com a propriedade LoggedStages, você deve salvar a query traduzida diretamente após sua execução e antes de executar qualquer outra query com o mesmo objeto consultável.

O exemplo a seguir usa a propriedade LoggedStages em uma query LINQ que usa uma operação escalar e, em seguida, imprime a query traduzida:

var queryableCollection = _restaurantsCollection.AsQueryable();
var query = queryableCollection
.Where(r => r.Name == "The Movable Feast");
var result = query.FirstOrDefault();
var queryTranslated = query.LoggedStages;
Console.WriteLine(queryTranslated.ToJson());
[{ "$match" : { "name" : "The Movable Feast" } }, { "$limit" : NumberLong(1) }]

Importante

LoggedStages não é seguro para threads. Executar uma query e acessar a propriedade LoggedStages associada a partir de vários threads pode ter resultados não determinísticos.

Voltar

Agregação