LINQ
이 페이지의 내용
개요
이 가이드 에서는 MongoDB .NET/ C# 드라이버 와 함께LINQ 를 사용하는 방법을 학습 수 있습니다. LINQ를 사용하면 언어 키워드와 연산자를 사용하여 강력한 형식의 객체 컬렉션에 대한 쿼리를 구성할 수 있습니다. .NET/ C# 드라이버 는 LINQ 쿼리를 집계 작업으로 자동 변환합니다.
이 가이드의 예시에서는 Atlas 샘플 데이터 세트에 제공된 sample_restaurants
데이터베이스의 restaurants
컬렉션을 사용합니다. 무료 MongoDB Atlas 클러스터를 생성하고 샘플 데이터 세트를 로드하는 방법에 대한 자세한 내용은 빠른 시작을 참조하세요.
다음 Restaurant
, Address
및 GradeEntry
클래스는 이 컬렉션의 문서를 모델링합니다.
public class Restaurant { public ObjectId Id { get; set; } public string Name { get; set; } [ ] 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; } [ ] public double[] Coordinates { get; set; } public string Street { get; set; } [ ] 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 restaurantsDatabase = client.GetDatabase("sample_restaurants"); 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
$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
$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
$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 }
중첩된 문
Select
및 SelectMany
문을 연결하거나 중첩하여 중첩된 배열을 해제할 수 있습니다.새 스키마 가 있는 문서가 포함된 컬렉션 을 가정해 보겠습니다. 이러한 문서에는 restaurants
클래스가 나타내는 문서 배열 을 보유하는 필드 가 포함되어 Restaurant
있습니다. 배열 내의 문서에는 각각 grades
클래스가 나타내는 문서 배열 을 보유하는 필드 가 Grade
있습니다. 다음 코드는 이 컬렉션 에 있는 단일 문서 의 예시 입니다.
{ "_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 } ], ... }, ... ] }
SelectMany
또는 Select
문 내에 SelectMany
문을 중첩할 수 있습니다. 다음 예시 에서는 Select
성명서 내에 SelectMany
성명서 을 중첩하여 컬렉션 의 각 문서 에서 배열 을 조회 합니다. 각 배열 에는 각 문서 에 있는 모든 레스토랑의 모든 등급 객체가 포함됩니다.
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 [ ... ]
$그룹
$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
$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
집계 단계는 한 컬렉션의 문서를 동일한 데이터베이스의 다른 컬렉션에 있는 문서와 조인합니다. $lookup
단계에서는 각 입력 문서에 새 배열 필드를 추가합니다. 새 배열 필드에는 '조인'된 컬렉션에서
일치하는 문서들이 포함됩니다.
참고
조회를 수행하려면 AsQueryable()
메서드를 사용하여 두 컬렉션을 모두 쿼리할 수 있도록 설정해야 합니다.
컬렉션을 쿼리 가능하게 만드는 방법을 알아보려면 컬렉션을 쿼리 가능하게 만들기를 참조하세요.
레스토랑 리뷰가 있는 reviews
라는 sample_restaurants
데이터베이스의 두 번째 컬렉션을 생각해 보세요. $lookup
단계를 사용하여 해당 컬렉션의 문서를 restaurants
컬렉션의 동일한 name
값을 가진 문서에 조인할 수 있습니다.
다음 Review
클래스는 reviews
컬렉션의 문서를 모델링합니다.
public class Review { public ObjectId Id { get; set; } [ ] public string RestaurantName { get; set; } public string Reviewer { get; set; } [ ] 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
$vectorSearch
집계 단계는 지정된 필드의 벡터에 대해 근사 최근접 이웃(ANN) 검색을 수행합니다. 데이터에 대한 벡터 검색을 수행하려면 먼저 컬렉션에 정의된 Atlas Vector Search 인덱스가 있어야 합니다.
팁
다음 예시에서 사용된 샘플 데이터 세트를 얻으려면 빠른 시작을 참조하세요. 다음 예시에 사용된 샘플 Atlas Vector Search 인덱스를 Atlas 매뉴얼의 Atlas Vector Search 인덱스 생성을 참조하세요.
sample_mflix
데이터베이스의 embedded_movies
컬렉션을 가정해 보겠습니다. $vectorSearch
단계를 사용하여 컬렉션에 있는 문서의 plot_embedding
필드에서 시맨틱 검색을 수행할 수 있습니다.
다음 EmbeddedMovie
클래스는 embedded_movies
컬렉션의 문서를 모델링합니다.
[ ]public class EmbeddedMovie { [ ] public string Title { get; set; } public string Plot { get; set; } [ ] public double[] Embedding { get; set; } }
다음 예시에서는 $vectorSearch
단계를 생성하여 "time travel"
문자열에 대한 벡터 임베딩을 사용하여 plot_embedding
필드를 검색하는 방법을 보여줍니다.
// 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 매뉴얼의 벡터 검색 쿼리 실행을 참조하고 언어 드롭다운에서 C#을 선택하세요.
비트 연산자
이 섹션에서는 집계 파이프라인 에서 사용할 수 있는 .NET/ C# 드라이버 에서 지원하는 비트 연산자에 대해 설명합니다. 동일한 단계에서 여러 비트 연산자를 사용할 수 있습니다. 비트 연산자를 사용할 때는 다음 지침 적용 됩니다.
모든 피연산자는
int
또는long
유형이어야 합니다.$bitAnd
,$bitOr
,$bitXor
는 두 개 이상의 피연산자를 사용합니다.$bitNot
은 피연산자를 하나만 사용합니다.비트 연산은 왼쪽에서 오른쪽으로 평가됩니다.
이 섹션의 예제에서는 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 }
"is_available"
필드 는 재료의 사용 가능 여부를 나타냅니다. 이 필드 의 값이 0
이면 재료를 사용할 수 없습니다. 값이 1
이면 재료를 사용할 수 있습니다.
"is_cheap"
필드 는 재료가 저렴한지 여부를 나타냅니다. 이 필드 의 값이 0
이면 재료가 저렴하지 않습니다. 값이 1
이면 재료가 저렴합니다.
다음 Ingredient
클래스는 ingredients
컬렉션의 문서를 모델링합니다.
public class Ingredient { public int Id { get; set; } public string Name { get; set; } [ ] public int? IsAvailable { get; set; } [ ] public int? IsCheap { get; set; } }
참고
누락되거나 정의되지 않은 피연산자
$bitAnd
$bitAnd
집계 연산자 는 지정된 인수에 대해 비트 AND 연산을 수행합니다. &
문자로 두 개 이상의 절을 연결하여 $bitAnd
연산자 를 사용할 수 있습니다.
다음 예시 에서는 LINQ를 사용하여 $bitAnd
단계를 만드는 방법을 보여 줍니다. 이 코드는 Name
필드 의 값이 "watermelon"
인 문서 를 검색합니다. 그런 다음 이 문서 의 IsAvailable
및 IsCheap
필드 값에 대해 비트 AND 연산을 수행합니다.
var query = queryableCollection .Where(i => i.Name == "watermelon") .Select(i => i.IsAvailable & i.IsCheap);
앞의 코드는 IsAvailable
필드 (1
)와 IsCheap
필드 (1
)의 값에 대한 AND 연산의 결과인 1
을 반환합니다.
다음 예시 에서는 컬렉션 의 모든 문서에 대해 동일한 비트 AND 연산을 수행합니다.
var query = queryableCollection .Select(i => i.IsAvailable & i.IsCheap);
1 0 0 1 0 null
null
결과는 Name
필드 값이 "cheese"
인 문서 에서 가져옵니다. 이 문서 에는 IsCheap
필드 가 없으므로 표현식 이 null
로 평가됩니다.
$bitOr
$bitOr
집계 연산자 는 지정된 인수에 대해 비트 OR 연산을 수행합니다. |
문자로 두 개 이상의 절을 연결하여 $bitOr
연산자 를 사용할 수 있습니다.
다음 예시 에서는 LINQ를 사용하여 $bitOr
단계를 만드는 방법을 보여 줍니다. 이 코드는 Name
필드 의 값이 "onions"
인 문서 를 검색합니다. 그런 다음 이 문서 의 IsAvailable
및 IsCheap
필드 값에 대해 비트 OR 연산을 수행합니다.
var query = queryableCollection .Where(i => i.Name == "onions") .Select(i => i.IsAvailable | i.IsCheap);
앞의 코드는 IsAvailable
필드 (1
)와 IsCheap
필드 (0
)의 값에 대한 OR 연산의 결과인 1
을 반환합니다.
$bitNot
$bitNot
집계 연산자 는 지정된 인수에 대해 비트 NOT 연산을 수행합니다. 피연산자 앞에 ~
문자를 붙여 $bitNot
연산자 를 사용할 수 있습니다. $bitNot
은(는) 인수를 하나만 사용합니다. 다음 예시 에서는 LINQ를 사용하여 $bitNot
단계를 만드는 방법을 보여 줍니다.
var query = queryableCollection .Select(i => ~i.IsCheap);
-2 -1 -1 -2 -2 null
$bitXor
$bitXor
집계 연산자 는 지정된 인수에 대해 비트 XOR 연산을 수행합니다. ^
문자로 두 개 이상의 절을 연결하여 $bitXor
연산자 를 사용할 수 있습니다.
다음 예시 에서는 LINQ를 사용하여 $bitXor
단계를 만드는 방법을 보여 줍니다. 이 코드는 Name
필드 의 값이 "watermelon"
또는 "onions"
인 문서를 검색합니다. 그런 다음 이러한 문서의 IsAvailable
및 IsCheap
필드 값에 대해 비트별 XOR 연산을 수행합니다.
var query = queryableCollection .Where(i => i.Name == "watermelon" || i.Name == "onions") .Select(i => i.IsAvailable ^ i.IsCheap);
결과에는 다음 값이 포함됩니다.
0 1
지원되지 않는 집계 단계
LINQ의 MongoDB .NET/C# 드라이버 구현은 다음 집계 단계를 지원하지 않습니다.
$redact
$geoNear
$out
빌더를 사용하여 $out
단계로 집계 파이프라인을 생성하는 방법을 알아보려면 컬렉션에 파이프라인 결과 쓰기 섹션을 참조하세요.
지원되는 방법
다음은 LINQ의 MongoDB .NET/ C# 드라이버 구현 에서 지원되는 몇 가지 메서드입니다.
메서드 이름 | 설명 |
---|---|
| 지정된 기준과 일치하는 문서가 있는지 확인합니다. |
| 지정된 필드의 평균을 계산합니다. |
| 지정된 기준과 일치하는 문서 수를 나타내는 |
| 지정된 기준과 일치하는 문서 수를 나타내는 |
|
|
| 지정된 조건과 일치하는 고유한 문서를 반환합니다. |
| 필드 존재 여부 테스트 |
| 일치하는 첫 번째 문서를 반환하고, 일치하는 문서가 없으면 예외를 발생시킵니다. |
| 일치하는 첫 번째 문서를 반환하거나 일치하는 문서가 없는 경우 |
| 지정된 기준에 따라 문서 그룹화 |
| 동일한 데이터베이스의 다른 컬렉션에 대한 왼쪽 외부 조인을 수행합니다. |
| 필드 가 누락되고 그렇지 않으면 false인 경우 |
| 필드 가 null이거나 누락된 경우 |
| 지정된 최대값을 가진 문서 반환 |
| 지정된 유형과 일치하는 문서 반환 |
| 지정된 정렬 순서로 결과 반환 |
| 세컨더리 정렬을 지정할 수 있습니다. |
| 지정된 기준에 따라 문서를 선택합니다. |
| 시퀀스의 각 요소를 프로젝션하고 결과 시퀀스를 하나의 문서로 결합 |
| 일치하는 문서 하나만 반환하고 문서의 개수가 하나가 아닐 경우 예외 발생 |
| 일치하는 단일 문서를 반환하고, 일치하는 문서가 없으면 |
| 지정된 수의 문서를 건너뛰고 나머지 결과를 반환합니다. |
| 지정된 필드에 있는 값의 합계 반환 |
| 반환할 결과의 수 지정 |
| 지정한 기준과 일치하는 모든 문서 반환 |
변환된 쿼리 보기
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
속성에 액세스하면 결정적이지 않은 결과가 발생할 수 있습니다.