문서 메뉴
문서 홈
/ / /
C#/.NET
/

LINQ

이 페이지의 내용

  • 개요
  • 컬렉션을 쿼리 가능하게 만들기
  • 지원되는 집계 단계
  • 프로젝트
  • $매치
  • limit
  • $skip
  • $unwind
  • $그룹
  • $sort
  • $lookup
  • 벡터 검색
  • 지원되지 않는 애그리게이션 단계
  • 지원되는 방법
  • 변환된 쿼리 보기

이 가이드에서는 MongoDB .NET/C# 드라이버와 함께 LINQ를 사용하는 방법을 배울 수 있습니다. LINQ를 사용하면 언어 키워드 및 연산자를 사용하여 강력한 형식의 객체 컬렉션에 대한 쿼리를 생성할 수 있습니다. .NET/C# 드라이버는 자동으로 LINQ 쿼리를 집계 작업으로 변환합니다.

이 가이드의 예제에서는 Atlas 샘플 데이터 세트 에 제공된 sample_restaurants 데이터베이스의 restaurants 컬렉션을 사용합니다. 무료 MongoDB Atlas 클러스터를 생성하고 샘플 데이터 세트를 로드하는 방법을 알아보려면 빠른 시작을 참조하세요.

다음 Restaurant, AddressGradeEntry 클래스는 이 컬렉션의 문서를 모델링합니다.

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 float[] 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; }
}

참고

restaurants 컬렉션의 문서는 카멜 케이스 명명 규칙을 사용합니다. 이 가이드의 예제에서는 ConventionPack 사용하여 컬렉션의 필드를 파스칼식 대/소문자로 역직렬화하고 Restaurant 클래스의 속성에 매핑합니다.

사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를참조하세요.

LINQ를 사용하여 컬렉션을 쿼리하려면 먼저 컬렉션에 연결되는 IQueryable 객체를 만들어야 합니다. 객체를 만들려면 다음과 같이 AsQueryable() 메서드를 사용합니다.

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

AsQueryable() 메서드가 MongoDB 특정 메서드 세트와 함께 IQueryable 확장자 메서드를 포함하는 IMongoQueryable 인스턴스를 반환합니다.

쿼리 가능한 객체가 있으면 메서드 구문을 사용하여 쿼리를 작성할 수 있습니다. 일부 파이프라인 단계는 SQL 쿼리 구문과 유사한 쿼리 이해 구문도 지원합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 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 };

이전 예제의 결과를 다음과 같이 출력할 수 있습니다.

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

쿼리 결과 액세스

ToList() 또는 ToCursor() 메서드를 사용하여 쿼리 결과에 액세스할 수도 있습니다:

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

LINQ를 사용하여 집계 파이프라인을 생성할 수 있습니다. .NET/C# 드라이버는 각 LINQ 구문을 해당 집계 파이프라인 단계로 자동 변환합니다. 이 섹션에서는 어떤 집계 파이프라인 단계가 지원되는지 알아볼 수 있습니다.

집계 파이프라인 단계에 대해 자세히 알아보려면 서버 매뉴얼의 집계 단계 페이지를 참조하세요.

$project 애그리게이션 단계에서는 지정된 필드만 포함된 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용하여 $project 단계를 생성하는 방법을 확인합니다:

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

이전 예제의 결과에는 다음 문서가 포함됩니다.

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

참고

_id 필드 제외

LINQ 프로젝션에 _id 필드를 포함하지 않은 경우 .NET/C# 드라이버가 결과에서 자동으로 제외합니다.

$match 애그리게이션 단계에서는 지정된 기준과 일치하는 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용하여 $match 단계를 생성하는 방법을 확인합니다:

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

이전 예제의 결과에는 다음 문서가 포함됩니다.

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

$limit 집계 단계는 쿼리에서 반환되는 문서 수를 제한합니다. 다음 예는 LINQ를 사용하여 $limit 스테이지를 생성하는 방법을 보여 줍니다:

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

이전 예제의 결과에는 다음 문서가 포함됩니다.

{ "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" }

$skip 애그리게이션 단계에서는 쿼리에서 반환한 지정된 수의 문서를 건너뛰고 나머지 결과를 반환합니다. 다음 예는 LINQ를 사용하여 $skip 단계를 생성하는 방법을 보여 줍니다:

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

앞의 예에서는 기준과 일치하는 처음 두 레스토랑을 건너뛰고 나머지를 반환합니다. 결과에는 다음 문서가 포함됩니다:

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

$unwind 애그리게이션 단계는 지정된 배열 필드를 분해하고 해당 배열의 각 요소에 대한 문서를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $unwind 단계를 생성하는 방법을 볼 수 있습니다.

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;

위 예의 쿼리는 Name 필드의 값이 "The Movable Feast"인 문서를 찾습니다. 그런 다음 이 문서의 Grades 배열에 있는 각 요소에 대해 쿼리는 새 문서를 반환합니다. 결과에는 다음 문서가 포함됩니다.

{ "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 }

$group 애그리게이션 단계에서는 지정한 기준에 따라 문서를 그룹으로 분리합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $group 단계를 생성하는 방법을 볼 수 있습니다.

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()};

앞의 예시에서는 각 문서를 Cuisine 필드의 값으로 그룹화한 다음 각 Cuisine 값이 있는 문서 수를 계산합니다. 결과에는 다음 문서가 포함됩니다.

// 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 }
...

참고

결과 순서

앞의 쿼리가 항상 동일한 순서로 결과를 반환하는 것은 아닙니다. 이 예제를 실행하면 위에 표시된 것과 다른 순서로 결과가 반환될 수 있습니다.

$sort 애그리게이션 단계는 지정한 순서대로 쿼리 결과를 반환합니다.

Method Syntax 또는 Query Syntax 탭을 선택하면 LINQ를 사용하여 $sort 단계를 생성하는 방법을 볼 수 있습니다.

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;

위 예제에서는 Name 필드를 기준으로 알파벳순으로 정렬된 쿼리 결과를 반환하고, 2차적으로 RestaurantId 필드에서는 내림차순으로 정렬합니다. 다음은 반환된 결과에 포함된 문서의 하위 집합입니다.

// 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" : [...] }
...

$lookup 집계 단계는 한 컬렉션의 문서를 동일한 데이터베이스의 다른 컬렉션에 있는 문서와 조인합니다. $lookup 단계에서는 각 입력 문서에 새 배열 필드를 추가합니다. 새 배열 필드에는 '조인'된 컬렉션에서 일치하는 문서들이 포함됩니다.

참고

조회를 수행하려면 AsQueryable() 메서드를 사용하여 두 컬렉션을 모두 쿼리 가능하게 만들어야 합니다.

컬렉션을 쿼리 가능하게 만드는 방법을 알아보려면 컬렉션을 쿼리 가능하게 만들기를 참조하세요.

레스토랑 리뷰가 있는 reviews라는 sample_restaurants 데이터베이스의 두 번째 컬렉션을 생각해 보세요. $lookup 단계를 사용하여 해당 컬렉션의 문서를 restaurants 컬렉션의 동일한 name 값을 가진 문서에 조인할 수 있습니다.

다음 Review 클래스는 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; }
}

Method Syntax 또는 Query Syntax 탭을 선택하여 LINQ를 사용하여 $lookup 단계를 생성하는 방법을 확인합니다.

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 };

앞의 예에서는 restaurants 컬렉션의 모든 문서를 반환합니다. 각 레스토랑 문서에는 해당 레스토랑에 대한 모든 리뷰가 포함된 reviews 추가 필드가 있습니다. 리뷰 문서의 name 필드 값이 레스토랑 문서의 name 필드 값과 일치하면 리뷰가 레스토랑과 일치합니다.

다음은 반환된 결과의 하위 집합을 보여줍니다.

// 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"
}
]
}

$vectorSearch 애그리게이션 단계는 지정된 필드의 벡터에 대해 대략적인 최근접 이웃 검색을 수행합니다. 컬렉션에 정의된 Atlas Vector Search 인덱스가 있어야 데이터에서 벡터 검색을 수행할 수 있습니다.

다음 예제에 사용된 샘플 데이터 세트를 얻으려면 빠른 시작 을 참조하세요. 다음 예제에 사용된 샘플 Atlas Vector Search 인덱스를 만들려면 Atlas 매뉴얼의 Atlas Vector Search 인덱스 만들기 를 참조하세요.

sample_mflix 데이터베이스의 embedded_movies 컬렉션을 가정해 보겠습니다. $vectorSearch 단계를 사용하여 컬렉션에 있는 문서의 plot_embedding 필드에 대해 시맨틱 검색을 수행할 수 있습니다.

다음 EmbeddedMovie 클래스는 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; }
}

다음 예제에서는 "time travel" 문자열에 대한 벡터 임베딩을 사용하여 plot_embedding 필드를 검색하는 $vectorSearch 단계를 생성하는 방법을 보여 줍니다.

// 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 });

이전 예제의 결과에는 다음 문서가 포함되어 있습니다.

{ "_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" }

Atlas Vector Search, Atlas Vector Search 인덱스 및 이를 애플리케이션에 통합하는 방법에 대한 자세한 내용은 Atlas 매뉴얼의 Atlas Vector Search 개요 를 참조하세요. .NET/C# 드라이버를 사용하여 Atlas Vector Search 쿼리를 실행하는 방법에 대한 더 많은 예제는 Atlas 매뉴얼에서 Run Vector Search Queries (벡터 검색 쿼리 실행)를 참조하고 언어 드롭다운에서 C# 를 선택합니다.

LINQ의 MongoDB .NET/C# 드라이버 구현은 다음 애그리게이션 단계를 지원하지 않습니다.

  • $redact

  • $geoNear

  • $out

빌더를 사용하여 $out 단계로 집계 파이프라인을 생성하는 방법을 알아보려면 컬렉션에 파이프라인 결과 쓰기 섹션을 참조하세요.

다음은 LINQ의 MongoDB .NET/C# 드라이버 구현에서 지원되는 몇 가지 메서드입니다.

메서드 이름
설명
Any
지정된 기준과 일치하는 문서가 있는지 확인합니다.
Average
지정된 필드의 평균을 계산합니다.
Count
지정된 기준과 일치하는 문서 수를 나타내는 Int32를 반환합니다.
LongCount
지정된 기준과 일치하는 문서 수를 나타내는 Int64를 반환합니다.
Distinct
지정된 조건과 일치하는 고유한 문서를 반환합니다.
First
일치하는 첫 번째 문서를 반환하고, 일치하는 문서가 없으면 예외를 발생시킵니다.
FirstOrDefault
일치하는 첫 번째 문서를 반환하거나 일치하는 문서가 없는 경우 null을 반환합니다.
GroupBy
지정된 기준에 따라 문서 그룹화
GroupJoin
동일한 데이터베이스의 다른 컬렉션에 대한 왼쪽 외부 조인을 수행합니다.
Max
지정된 최대값을 가진 문서 반환
OfType
지정된 유형과 일치하는 문서 반환
OrderBy, OrderByDescending
지정된 정렬 순서로 결과 반환
ThenBy, ThenByDescending
세컨더리 정렬을 지정할 수 있습니다.
Select
지정된 기준에 따라 문서를 선택합니다.
SelectMany
시퀀스의 각 요소를 프로젝션하고 결과 시퀀스를 하나의 문서로 결합
Single
일치하는 문서 하나만 반환하고 문서의 개수가 하나가 아닐 경우 예외 발생
SingleOrDefault
일치하는 단일 문서를 반환하고, 일치하는 문서가 없으면 null을 반환
Skip
지정된 수의 문서를 건너뛰고 나머지 결과를 반환합니다.
Sum
지정된 필드에 있는 값의 합계 반환
Take
반환할 결과의 수 지정
Where
지정한 기준과 일치하는 모든 문서 반환

LINQ 쿼리를 실행하면 .NET/C# 드라이버가 자동으로 쿼리를 MongoDB 쿼리 API로 작성된 집계 파이프라인으로 변환합니다. ToString() 메서드 또는 LoggedStages 속성을 사용하여 변환된 쿼리를 볼 수 있습니다.

스칼라가 아닌 연산에 대해 변환된 쿼리를 보려면 ToString() 메서드를 사용합니다. 스칼라가 아닌 연산은 다음과 같이 쿼리 객체를 반환하는 연산입니다:

  • Where

  • Select

  • SelectMany

  • GroupJoin

다음 예시에서는 LINQ 쿼리에서 ToString() 메서드를 호출하고 변환된 쿼리를 출력합니다.

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" } }])

스칼라 작업에 대한 변환된 쿼리를 얻으려면 LoggedStages 속성을 사용하세요. 스칼라 연산은 다음과 같이 쿼리 객체가 아닌 스칼라 결과를 반환하는 연산입니다.

  • First

  • Sum

  • Count

  • Min

  • Max

LoggedStages 속성으로 변환된 쿼리를 가져오려면 변환된 쿼리를 실행한 직후, 그리고 동일한 쿼리 가능한 객체를 가진 다른 쿼리를 실행하기 전에 변환된 쿼리를 저장해야 합니다.

다음 예시에서는 스칼라 연산을 사용하는 LINQ 쿼리에서 LoggedStages 속성을 사용한 다음 변환된 쿼리를 인쇄합니다.

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) }]

중요

LoggedStages 는 스레드로부터 안전하지 않습니다. 쿼리를 실행하고 여러 스레드에서 관련 LoggedStages 속성에 액세스하면 결정적이지 않은 결과가 발생할 수 있습니다.

돌아가기

집계

다음

BSON 운영